{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:03:09.356699Z",
     "start_time": "2020-04-14T09:03:09.349988Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import zipfile\n",
    "\n",
    "\n",
    "root_path = './../datasets'\n",
    "# processed_folder =  os.path.join(root_path)\n",
    "\n",
    "# zip_ref = zipfile.ZipFile(os.path.join(root_path,'mini-imagenet.zip'), 'r')\n",
    "# zip_ref.extractall(root_path)\n",
    "# zip_ref.close()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:03:10.971869Z",
     "start_time": "2020-04-14T09:03:10.469061Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import torch\n",
    "from torch.utils.data import Dataset\n",
    "from torchvision.transforms import transforms\n",
    "import numpy as np\n",
    "import collections\n",
    "from PIL import Image\n",
    "import csv\n",
    "import random\n",
    "\n",
    "\n",
    "class MiniImagenet(Dataset):\n",
    "    \"\"\"\n",
    "    put mini-imagenet files as :\n",
    "    root :\n",
    "        |- images/*.jpg includes all images\n",
    "        |- train.csv\n",
    "        |- test.csv\n",
    "        |- val.csv\n",
    "    NOTICE: meta-learning is different from general supervised learning, especially the concept of batch and set.\n",
    "    batch: contains several sets\n",
    "    sets: conains n_way * k_shot for meta-train set, n_way * n_query for meta-test set.\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, root, mode, batchsz, n_way, k_shot, k_query, resize, startidx=0):\n",
    "        \"\"\"\n",
    "        :param startidx: start to index label from startidx\n",
    "        \"\"\"\n",
    "\n",
    "        self.batchsz = batchsz  # batch of set, not batch of imgs\n",
    "        self.n_way = n_way  # n-way\n",
    "        self.k_shot = k_shot  # k-shot\n",
    "        self.k_query = k_query  # for evaluation\n",
    "        self.setsz = self.n_way * self.k_shot  # num of samples per set\n",
    "        self.querysz = self.n_way * self.k_query  # number of samples per set for evaluation\n",
    "        self.resize = resize  # resize to\n",
    "        self.startidx = startidx  # index label not from 0, but from startidx\n",
    "        print('shuffle DB :%s, b:%d, %d-way, %d-shot, %d-query, resize:%d' % (mode, batchsz, n_way, k_shot, k_query, resize))\n",
    "\n",
    "        if mode == 'train':\n",
    "            self.transform = transforms.Compose([lambda x: Image.open(x).convert('RGB'),\n",
    "                                                 transforms.Resize((self.resize, self.resize)),\n",
    "                                                 # transforms.RandomHorizontalFlip(),\n",
    "                                                 # transforms.RandomRotation(5),\n",
    "                                                 transforms.ToTensor(),\n",
    "                                                 transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))\n",
    "                                                 ])\n",
    "        else:\n",
    "            self.transform = transforms.Compose([lambda x: Image.open(x).convert('RGB'),\n",
    "                                                 transforms.Resize((self.resize, self.resize)),\n",
    "                                                 transforms.ToTensor(),\n",
    "                                                 transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))\n",
    "                                                 ])\n",
    "\n",
    "        self.path = os.path.join(root, 'images')  # image path\n",
    "        \n",
    "        # :return: dictLabels: {label1: [filename1, filename2, filename3, filename4,...], }\n",
    "        dictLabels = self.loadCSV(os.path.join(root, mode + '.csv'))  # csv path\n",
    "        self.data = []\n",
    "        self.img2label = {}\n",
    "        for i, (label, imgs) in enumerate(dictLabels.items()):\n",
    "            self.data.append(imgs)  # [[img1, img2, ...], [img111, ...]]\n",
    "            self.img2label[label] = i + self.startidx  # {\"img_name[:9]\":label}\n",
    "        self.cls_num = len(self.data)\n",
    "\n",
    "        self.create_batch(self.batchsz)\n",
    "\n",
    "    def loadCSV(self, csvf):\n",
    "        \"\"\"\n",
    "        return a dict saving the information of csv\n",
    "        :param splitFile: csv file name\n",
    "        :return: {label:[file1, file2 ...]}\n",
    "        \"\"\"\n",
    "        dictLabels = {}\n",
    "        with open(csvf) as csvfile:\n",
    "            csvreader = csv.reader(csvfile, delimiter=',')\n",
    "            next(csvreader, None)  # skip (filename, label)\n",
    "            for i, row in enumerate(csvreader):\n",
    "                filename = row[0]\n",
    "                label = row[1]\n",
    "                # append filename to current label\n",
    "                if label in dictLabels.keys():\n",
    "                    dictLabels[label].append(filename)\n",
    "                else:\n",
    "                    dictLabels[label] = [filename]\n",
    "        return dictLabels\n",
    "\n",
    "    def create_batch(self, batchsz):\n",
    "        \"\"\"\n",
    "        create batch for meta-learning.\n",
    "        ×episode× here means batch, and it means how many sets we want to retain.\n",
    "        :param episodes: batch size\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.support_x_batch = []  # support set batch\n",
    "        self.query_x_batch = []  # query set batch\n",
    "        for b in range(batchsz):  # for each batch\n",
    "            # 1.select n_way classes randomly\n",
    "            selected_cls = np.random.choice(self.cls_num, self.n_way, False)  # no duplicate\n",
    "            np.random.shuffle(selected_cls)\n",
    "            support_x = []\n",
    "            query_x = []\n",
    "            for cls in selected_cls:\n",
    "                # 2. select k_shot + k_query for each class\n",
    "                selected_imgs_idx = np.random.choice(len(self.data[cls]), self.k_shot + self.k_query, False)\n",
    "                np.random.shuffle(selected_imgs_idx)\n",
    "                indexDtrain = np.array(selected_imgs_idx[:self.k_shot])  # idx for Dtrain\n",
    "                indexDtest = np.array(selected_imgs_idx[self.k_shot:])  # idx for Dtest\n",
    "                support_x.append(\n",
    "                    np.array(self.data[cls])[indexDtrain].tolist())  # get all images filename for current Dtrain\n",
    "                query_x.append(np.array(self.data[cls])[indexDtest].tolist())\n",
    "\n",
    "            # shuffle the correponding relation between support set and query set\n",
    "            random.shuffle(support_x)\n",
    "            random.shuffle(query_x)\n",
    "\n",
    "            self.support_x_batch.append(support_x)  # append set to current sets\n",
    "            self.query_x_batch.append(query_x)  # append sets to current sets\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        \"\"\"\n",
    "        index means index of sets, 0<= index <= batchsz-1\n",
    "        :param index:\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        # [setsz, 3, resize, resize]\n",
    "        support_x = torch.FloatTensor(self.setsz, 3, self.resize, self.resize)\n",
    "        # [setsz]\n",
    "        support_y = np.zeros((self.setsz), dtype=np.int)\n",
    "        # [querysz, 3, resize, resize]\n",
    "        query_x = torch.FloatTensor(self.querysz, 3, self.resize, self.resize)\n",
    "        # [querysz]\n",
    "        query_y = np.zeros((self.querysz), dtype=np.int)\n",
    "\n",
    "        flatten_support_x = [os.path.join(self.path, item)\n",
    "                             for sublist in self.support_x_batch[index] for item in sublist]\n",
    "        support_y = np.array(\n",
    "            [self.img2label[item[:9]]  # filename:n0153282900000005.jpg, the first 9 characters treated as label\n",
    "             for sublist in self.support_x_batch[index] for item in sublist]).astype(np.int32)\n",
    "\n",
    "        flatten_query_x = [os.path.join(self.path, item)\n",
    "                           for sublist in self.query_x_batch[index] for item in sublist]\n",
    "        query_y = np.array([self.img2label[item[:9]]\n",
    "                            for sublist in self.query_x_batch[index] for item in sublist]).astype(np.int32)\n",
    "\n",
    "        # print('global:', support_y, query_y)\n",
    "        # support_y: [setsz]\n",
    "        # query_y: [querysz]\n",
    "        # unique: [n-way], sorted\n",
    "        unique = np.unique(support_y)\n",
    "        random.shuffle(unique)\n",
    "        # relative means the label ranges from 0 to n-way\n",
    "        support_y_relative = np.zeros(self.setsz)\n",
    "        query_y_relative = np.zeros(self.querysz)\n",
    "        for idx, l in enumerate(unique):\n",
    "            support_y_relative[support_y == l] = idx\n",
    "            query_y_relative[query_y == l] = idx\n",
    "\n",
    "        # print('relative:', support_y_relative, query_y_relative)\n",
    "\n",
    "        for i, path in enumerate(flatten_support_x):\n",
    "            support_x[i] = self.transform(path)\n",
    "\n",
    "        for i, path in enumerate(flatten_query_x):\n",
    "            query_x[i] = self.transform(path)\n",
    "        # print(support_set_y)\n",
    "        # return support_x, torch.LongTensor(support_y), query_x, torch.LongTensor(query_y)\n",
    "\n",
    "        return support_x, torch.LongTensor(support_y_relative), query_x, torch.LongTensor(query_y_relative)\n",
    "\n",
    "    def __len__(self):\n",
    "        # as we have built up to batchsz of sets, you can sample some small batch size of sets.\n",
    "        return self.batchsz\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:03:11.154885Z",
     "start_time": "2020-04-14T09:03:11.150388Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# spt_x_batch = []\n",
    "# qry_x_batch = []\n",
    "\n",
    "# dtrain = MiniImagenet('./../datasets/mini-imagenet/', mode='train', n_way=5, k_shot=1,\n",
    "#                     k_query=15,\n",
    "#                     batchsz=10000, resize=84)\n",
    "\n",
    "\n",
    "# for b in range(10000):\n",
    "#     selected_cls = np.random.choice(65, 5, False)\n",
    "#     np.random.shuffle(selected_cls)\n",
    "    \n",
    "#     ## 构造支持集和查询集x\n",
    "#     spt_x = []\n",
    "#     qry_x = []\n",
    "#     for cls in selected_cls:\n",
    "#         selected_imgs_idx = np.random.choice(len(dtrain.data[cls]), 1 + 15, False)\n",
    "#         np.random.shuffle(selected_imgs_idx)\n",
    "#         indexDtrain = np.array(selected_imgs_idx[:1])\n",
    "#         indexDtest = np.array(selected_imgs_idx[1:])\n",
    "#         spt_x.append(np.array(dtrain.data[cls])[indexDtrain].tolist())\n",
    "#         qry_x.append(np.array(Dtrain.data[cls])[indexDtest].tolist())\n",
    "#     random.shuffle(spt_x) \n",
    "#     random.shuffle(qry_x)\n",
    "    \n",
    "#     spt_x_batch.append(spt_x)\n",
    "#     qry_x_batch.append(qry_x)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:03:11.659452Z",
     "start_time": "2020-04-14T09:03:11.654048Z"
    }
   },
   "outputs": [],
   "source": [
    "class Hello():\n",
    "    def __init__(self):\n",
    "        self.a = 1\n",
    "    def __getitem__(self,key):\n",
    "        print('hello')\n",
    "ins = Hello()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:15:01.193452Z",
     "start_time": "2020-04-14T09:15:01.162670Z"
    },
    "code_folding": []
   },
   "outputs": [],
   "source": [
    "from torch import nn\n",
    "class Learner(nn.Module):\n",
    "    \"\"\"\n",
    "    定义一个网络\n",
    "    \"\"\"\n",
    "    def __init__(self, config):\n",
    "        super(Learner, self).__init__()\n",
    "        self.config = config ## 对模型各个超参数的定义\n",
    "        '''\n",
    "        ## ParameterList可以像普通Python列表一样进行索引，\n",
    "        但是它包含的参数已经被正确注册，并且将被所有的Module方法都可见。\n",
    "        \n",
    "        '''\n",
    "        self.vars = nn.ParameterList() ## 这个字典中包含了所有需要被优化的tensor\n",
    "        self.vars_bn = nn.ParameterList()  \n",
    "        \n",
    "        for i, (name, param) in enumerate(self.config):\n",
    "            if name is 'conv2d':\n",
    "                ## [ch_out, ch_in, kernel_size, kernel_size]\n",
    "                weight = nn.Parameter(torch.ones(*param[:4])) ## 产生*param大小的全为1的tensor\n",
    "                torch.nn.init.kaiming_normal_(weight) ## 初始化权重\n",
    "                self.vars.append(weight) ## 加到nn.ParameterList中\n",
    "                \n",
    "                bias = nn.Parameter(torch.zeros(param[0]))\n",
    "                self.vars.append(bias)\n",
    "                \n",
    "            elif name is 'linear':\n",
    "                weight = nn.Parameter(torch.ones(*param))\n",
    "                torch.nn.init.kaiming_normal_(weight)\n",
    "                self.vars.append(weight)\n",
    "                bias  = nn.Parameter(torch.zeros(param[0]))\n",
    "                self.vars.append(bias)\n",
    "            \n",
    "            elif name is 'bn':\n",
    "                ## 对小批量(mini-batch)的2d或3d输入进行批标准化(Batch Normalization)操作,\n",
    "                ## BN层在训练过程中，会将一个Batch的中的数据转变成正态分布\n",
    "                weight = nn.Parameter(torch.ones(param[0]))\n",
    "                self.vars.append(weight)\n",
    "                bias = nn.Parameter(torch.zeros(param[0]))\n",
    "                self.vars.append(bias)\n",
    "                \n",
    "                ### \n",
    "                running_mean = nn.Parameter(torch.zeros(param[0]), requires_grad = False)\n",
    "                running_var = nn.Parameter(torch.zeros(param[0]), requires_grad = False)\n",
    "                \n",
    "                self.vars_bn.extend([running_mean, running_var]) ## 在列表附加参数\n",
    "                \n",
    "            elif name in ['tanh', 'relu', 'upsample', 'avg_pool2d', 'max_pool2d',\n",
    "                          'flatten', 'reshape', 'leakyrelu', 'sigmoid']:\n",
    "                continue\n",
    "                \n",
    "            else:\n",
    "                raise NotImplementedError       \n",
    "    \n",
    "    \n",
    "    ## self.net(x_support[i], vars=None, bn_training = True)\n",
    "    ## x: torch.Size([5, 1, 28, 28])\n",
    "    ## 构造模型\n",
    "    def forward(self, x, vars = None, bn_training=True):\n",
    "        '''\n",
    "        :param bn_training: set False to not update\n",
    "        :return: \n",
    "        '''\n",
    "        \n",
    "        if vars is None:\n",
    "            vars = self.vars\n",
    "            \n",
    "        idx = 0 ; bn_idx = 0\n",
    "        for name, param in self.config:\n",
    "            if name is 'conv2d':\n",
    "                weight, bias = vars[idx], vars[idx + 1]\n",
    "                x = F.conv2d(x, weight, bias, stride = param[4], padding = param[5]) \n",
    "                idx += 2\n",
    "                \n",
    "            elif name is 'linear':\n",
    "                weight, bias = vars[idx], vars[idx + 1]\n",
    "                x = F.linear(x, weight, bias)\n",
    "                idx += 2\n",
    "                \n",
    "            elif name is 'bn':\n",
    "                weight, bias = vars[idx], vars[idx + 1]\n",
    "                running_mean, running_var = self.vars_bn[bn_idx], self.vars_bn[bn_idx + 1]\n",
    "                x = F.batch_norm(x, running_mean, running_var, weight= weight, bias = bias, training = bn_training)\n",
    "                idx += 2\n",
    "                bn_idx += 2\n",
    "            \n",
    "            elif name is 'flatten':\n",
    "                x = x.view(x.size(0), -1)\n",
    "            \n",
    "            elif name is 'relu':\n",
    "                x = F.relu(x, inplace = [param[0]])\n",
    "            \n",
    "            elif name is 'reshape':\n",
    "                # [b, 8] => [b, 2, 2, 2]\n",
    "                x = x.view(x.size(0), *param)\n",
    "            elif name is 'leakyrelu':\n",
    "                x = F.leaky_relu(x, negative_slope=param[0], inplace=param[1])\n",
    "            elif name is 'tanh':\n",
    "                x = F.tanh(x)\n",
    "            elif name is 'sigmoid':\n",
    "                x = torch.sigmoid(x)\n",
    "            elif name is 'upsample':\n",
    "                x = F.upsample_nearest(x, scale_factor=param[0])\n",
    "            elif name is 'max_pool2d':\n",
    "                x = F.max_pool2d(x, param[0], param[1], param[2])\n",
    "            elif name is 'avg_pool2d':\n",
    "                x = F.avg_pool2d(x, param[0], param[1], param[2])\n",
    "            else:\n",
    "                raise NotImplementedError\n",
    "            \n",
    "        assert idx == len(vars)\n",
    "        assert bn_idx == len(self.vars_bn)\n",
    "        \n",
    "        return x\n",
    "    \n",
    "    \n",
    "    \n",
    "    def parameters(self):\n",
    "        \n",
    "        return self.vars"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-14T09:15:01.791501Z",
     "start_time": "2020-04-14T09:15:01.752514Z"
    },
    "code_folding": [
     3
    ]
   },
   "outputs": [],
   "source": [
    "from copy import deepcopy\n",
    "from torch import nn\n",
    "\n",
    "class Meta(nn.Module):\n",
    "    \"\"\"\n",
    "    Meta-Learner\n",
    "    \"\"\"\n",
    "    def __init__(self, config):\n",
    "        super(Meta, self).__init__()   \n",
    "        self.update_lr = 0.1 ## learner中的学习率，即\\alpha\n",
    "        self.meta_lr = 1e-3 ## meta-learner的学习率，即\\beta\n",
    "        self.n_way = 5 ## 5种类型\n",
    "        self.k_shot = 1 ## 一个样本\n",
    "        self.k_query = 15 ## 15个查询样本\n",
    "        self.task_num = 4 ## 每轮抽8个任务进行训练\n",
    "        self.update_step = 5 ## task-level inner update steps\n",
    "        self.update_step_test = 5 ## 用在finetunning这个函数中\n",
    "        \n",
    "        self.net = Learner(config) ## base-learner\n",
    "        self.meta_optim = torch.optim.Adam(self.net.parameters(), lr = self.meta_lr)\n",
    "        \n",
    "    def forward(self, x_support, y_support, x_query, y_query):\n",
    "        \"\"\"\n",
    "        :param x_spt:   torch.Size([8, 5, 1, 28, 28])\n",
    "        :param y_spt:   torch.Size([8, 5])\n",
    "        :param x_qry:   torch.Size([8, 75, 1, 28, 28])\n",
    "        :param y_qry:   torch.Size([8, 75])\n",
    "        :return:\n",
    "        N-way-K-shot\n",
    "        \"\"\"\n",
    "        task_num, ways, shots, h, w = x_support.size()\n",
    "#         print(\"Meta forward\")\n",
    "        querysz = x_query.size(1)## 75 = 15*5\n",
    "        losses_q = [0 for _ in range(self.update_step +1)] ## losses_q[i] is the loss on step i\n",
    "        corrects = [0 for _ in range(self.update_step +1)]\n",
    "        \n",
    "        for i in range(task_num):    \n",
    "            \n",
    "            ## 第0步更新\n",
    "            logits = self.net(x_support[i], vars=None, bn_training = True)## return 一个经过各层计算后的y\n",
    "            ## logits : 5*5的tensor\n",
    "            loss = F.cross_entropy(logits, y_support[i])  ## 计算Loss值\n",
    "            grad = torch.autograd.grad(loss, self.net.parameters()) ##计算梯度。如果输入x，输出是y，则求y关于x的导数（梯度）\n",
    "            tuples = zip(grad, self.net.parameters() ) ##将梯度grad和参数\\theta一一对应起来\n",
    "            ## fast_weights这一步相当于求了一个\\theta - \\alpha*\\nabla(L)\n",
    "            fast_weights = list( map(lambda p: p[1] - self.update_lr * p[0], tuples) )\n",
    "            \n",
    "            ### 在query集上进行测试，计算准确率\n",
    "            ## 这一步使用的是更新前的参数\n",
    "            with torch.no_grad():\n",
    "                logits_q = self.net(x_query[i], self.net.parameters(), bn_training = True) ## logits_q :torch.Size([75, 5])\n",
    "                loss_q = F.cross_entropy(logits_q, y_query[i]) ## y_query : torch.Size([75])\n",
    "                losses_q[0] += loss_q ##将loss存在数组的第一个位置\n",
    "                pred_q = F.softmax(logits_q, dim = 1).argmax(dim=1) ## size = (75)\n",
    "                correct = torch.eq(pred_q, y_query[i]).sum().item()## item()取出tensor中的数字\n",
    "                corrects[0] += correct\n",
    "            \n",
    "            ### 在query集上进行测试，计算准确率\n",
    "            ## 这一步使用的是更新后的参数\n",
    "            with torch.no_grad():\n",
    "                logits_q = self.net(x_query[i], fast_weights, bn_training = True)\n",
    "                loss_q = F.cross_entropy(logits_q, y_query[i])\n",
    "                losses_q[1] += loss_q\n",
    "                pred_q = F.softmax(logits_q, dim = 1).argmax(dim=1)\n",
    "                correct = torch.eq(pred_q, y_query[i]).sum().item()\n",
    "                corrects[1] += correct\n",
    "             \n",
    "            \n",
    "            for k in range(1, self.update_step):\n",
    "                logits = self.net(x_support[i], fast_weights, bn_training =True)\n",
    "                loss = F.cross_entropy(logits, y_support[i])\n",
    "                grad = torch.autograd.grad(loss, fast_weights)\n",
    "                tuples = zip(grad,fast_weights)\n",
    "                fast_weights = list(map(lambda p:p[1] - self.update_lr * p[0], tuples))\n",
    "                \n",
    "                if k < self.update_step - 1:\n",
    "                    with torch.no_grad():   \n",
    "                        logits_q = self.net(x_query[i], fast_weights, bn_training = True)\n",
    "                        loss_q = F.cross_entropy(logits_q, y_query[i])\n",
    "                        losses_q[k+1] += loss_q\n",
    "                        \n",
    "                else:\n",
    "                    logits_q = self.net(x_query[i], fast_weights, bn_training = True)\n",
    "                    loss_q = F.cross_entropy(logits_q, y_query[i])\n",
    "                    losses_q[k+1] += loss_q\n",
    "                \n",
    "                with torch.no_grad():\n",
    "                    pred_q = F.softmax(logits_q, dim=1).argmax(dim = 1)\n",
    "                    correct = torch.eq(pred_q, y_query[i]).sum().item()\n",
    "                    corrects[k+1] += correct\n",
    "                    \n",
    "        ## 在一组8个任务结束后，求一个平均的loss\n",
    "        loss_q = losses_q[-1] / task_num\n",
    "        self.meta_optim.zero_grad() ## 梯度清零\n",
    "        loss_q.backward() ## 计算梯度\n",
    "        self.meta_optim.step() ## 用设置好的优化方法来迭代模型参数，这一步是meta步迭代\n",
    "        \n",
    "        accs = np.array(corrects) / (querysz * task_num) \n",
    "        \n",
    "        return accs\n",
    "        \n",
    "    \n",
    "    def finetunning(self, x_support, y_support, x_query, y_query):\n",
    "        assert len(x_support.shape) == 4\n",
    "        \n",
    "        querysz = x_query.size(0)\n",
    "        \n",
    "        corrects = [0 for _ in range(self.update_step_test + 1)]\n",
    "        \n",
    "        # in order to not ruin the state of running_mean/variance and bn_weight/bias\n",
    "        # we finetunning on the copied model instead of self.net\n",
    "        net = deepcopy(self.net)\n",
    "        \n",
    "        logits = net(x_support)\n",
    "        loss = F.cross_entropy(logits, y_support)\n",
    "        grad = torch.autograd.grad(loss, net.parameters())\n",
    "        fast_weights = list(map(lambda p: p[1] - self.update_lr * p[0], zip(grad, net.parameters())))\n",
    "        \n",
    "        \n",
    "        ## 开始训练前的准确率\n",
    "        with torch.no_grad():\n",
    "            logits_q = net(x_query, net.parameters(), bn_training = True)\n",
    "            pred_q = F.softmax(logits_q, dim =1).argmax(dim=1)\n",
    "            correct = torch.eq(pred_q, y_query).sum().item()\n",
    "            corrects[0] += correct\n",
    "         \n",
    "        ## 训练后的准确率\n",
    "        with torch.no_grad():\n",
    "            logits_q = net(x_query, fast_weights, bn_training = True)\n",
    "            pred_q = F.softmax(logits_q, dim = 1).argmax(dim=1)\n",
    "            correct = torch.eq(pred_q, y_query).sum().item()\n",
    "            corrects[1] += correct\n",
    "            \n",
    "        for k in range(1, self.update_step_test):\n",
    "            logits = net(x_support, fast_weights, bn_training=True)\n",
    "            loss = F.cross_entropy(logits, y_support)\n",
    "            grad = torch.autograd.grad(loss, fast_weights)\n",
    "            fast_weights = list(map(lambda p: p[1] - self.update_lr * p[0], zip(grad, fast_weights)))\n",
    "            \n",
    "            logits_q = net(x_query, fast_weights, bn_training=True)\n",
    "            loss_q = F.cross_entropy(logits_q, y_query)\n",
    "            \n",
    "            with torch.no_grad():\n",
    "                pred_q = F.softmax(logits_q, dim =1).argmax(dim=1)\n",
    "                correct = torch.eq(pred_q, y_query).sum().item()\n",
    "                corrects[k+1] += correct\n",
    "                \n",
    "        del net\n",
    "        \n",
    "        accs = np.array(corrects) / querysz\n",
    "        \n",
    "        return accs\n",
    "                \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-04-15T12:36:55.090143Z",
     "start_time": "2020-04-14T10:05:43.539426Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "shuffle DB :train, b:10000, 5-way, 1-shot, 15-query, resize:84\n",
      "shuffle DB :test, b:100, 5-way, 1-shot, 15-query, resize:84\n",
      "step: 0 \ttraining acc: [0.22       0.21       0.27333333 0.26       0.27333333 0.27666667]\n",
      "Test acc: [0.1967 0.2428 0.2556 0.2578 0.2551 0.2537]\n",
      "step: 100 \ttraining acc: [0.2        0.32       0.39333333 0.38666667 0.38666667 0.38666667]\n",
      "step: 200 \ttraining acc: [0.2        0.3        0.29666667 0.32666667 0.32666667 0.32666667]\n",
      "step: 300 \ttraining acc: [0.20333333 0.28333333 0.36333333 0.35       0.35333333 0.35      ]\n",
      "step: 400 \ttraining acc: [0.20666667 0.24       0.26       0.26333333 0.25666667 0.25666667]\n",
      "step: 500 \ttraining acc: [0.2        0.22666667 0.28333333 0.29666667 0.29333333 0.29333333]\n",
      "step: 600 \ttraining acc: [0.19333333 0.30333333 0.30666667 0.32       0.32333333 0.32333333]\n",
      "step: 700 \ttraining acc: [0.19333333 0.39333333 0.39333333 0.39333333 0.4        0.4       ]\n",
      "step: 800 \ttraining acc: [0.20333333 0.38333333 0.38       0.38666667 0.39       0.39      ]\n",
      "step: 900 \ttraining acc: [0.24666667 0.34       0.33       0.33333333 0.33666667 0.34666667]\n",
      "step: 1000 \ttraining acc: [0.20333333 0.35333333 0.37       0.36666667 0.38       0.37666667]\n",
      "Test acc: [0.208  0.3318 0.3362 0.337  0.3372 0.337 ]\n",
      "step: 1100 \ttraining acc: [0.16666667 0.45       0.45       0.45666667 0.45333333 0.45333333]\n",
      "step: 1200 \ttraining acc: [0.27333333 0.45       0.44666667 0.45       0.44333333 0.44333333]\n",
      "step: 1300 \ttraining acc: [0.18666667 0.37333333 0.37       0.36666667 0.36666667 0.36      ]\n",
      "step: 1400 \ttraining acc: [0.17666667 0.44333333 0.44       0.43333333 0.43333333 0.43      ]\n",
      "step: 1500 \ttraining acc: [0.23       0.40333333 0.39666667 0.40333333 0.4        0.40666667]\n",
      "step: 1600 \ttraining acc: [0.20666667 0.37666667 0.37       0.37       0.37333333 0.37333333]\n",
      "step: 1700 \ttraining acc: [0.21666667 0.47666667 0.47333333 0.47       0.47       0.47      ]\n",
      "step: 1800 \ttraining acc: [0.20666667 0.35666667 0.36333333 0.36       0.37       0.37      ]\n",
      "step: 1900 \ttraining acc: [0.23       0.39       0.38       0.38666667 0.39       0.39333333]\n",
      "step: 2000 \ttraining acc: [0.17333333 0.41666667 0.43       0.43333333 0.42333333 0.42666667]\n",
      "Test acc: [0.1902 0.3796 0.385  0.385  0.3848 0.3845]\n",
      "step: 2100 \ttraining acc: [0.16666667 0.52333333 0.52666667 0.53       0.52666667 0.52333333]\n",
      "step: 2200 \ttraining acc: [0.19333333 0.42333333 0.43       0.44333333 0.43666667 0.43333333]\n",
      "step: 2300 \ttraining acc: [0.21666667 0.47333333 0.47666667 0.47666667 0.47666667 0.47333333]\n",
      "step: 2400 \ttraining acc: [0.16333333 0.44666667 0.43333333 0.43666667 0.43333333 0.43666667]\n",
      "step: 0 \ttraining acc: [0.16333333 0.41333333 0.43333333 0.43333333 0.43       0.43      ]\n",
      "Test acc: [0.2025 0.4006 0.4014 0.4036 0.4038 0.4028]\n",
      "step: 100 \ttraining acc: [0.16333333 0.36333333 0.36       0.35666667 0.35333333 0.35666667]\n",
      "step: 200 \ttraining acc: [0.15       0.45       0.45333333 0.45666667 0.46       0.46      ]\n",
      "step: 300 \ttraining acc: [0.16666667 0.44666667 0.44       0.45       0.45333333 0.46      ]\n",
      "step: 400 \ttraining acc: [0.2        0.49666667 0.5        0.51       0.50333333 0.50333333]\n",
      "step: 500 \ttraining acc: [0.20666667 0.41666667 0.42333333 0.42333333 0.42       0.42      ]\n",
      "step: 600 \ttraining acc: [0.17333333 0.51333333 0.50333333 0.49333333 0.49       0.49666667]\n",
      "step: 700 \ttraining acc: [0.18       0.40666667 0.40333333 0.38666667 0.39333333 0.38666667]\n",
      "step: 800 \ttraining acc: [0.28333333 0.44666667 0.45       0.44666667 0.45       0.45      ]\n",
      "step: 900 \ttraining acc: [0.19333333 0.49666667 0.49666667 0.50666667 0.51       0.50666667]\n",
      "step: 1000 \ttraining acc: [0.22       0.47333333 0.46666667 0.47       0.46333333 0.46      ]\n",
      "Test acc: [0.2078 0.4197 0.4219 0.4202 0.4194 0.4202]\n",
      "step: 1100 \ttraining acc: [0.21666667 0.45       0.44666667 0.44333333 0.44333333 0.45333333]\n",
      "step: 1200 \ttraining acc: [0.20333333 0.40666667 0.40333333 0.39666667 0.39333333 0.38666667]\n",
      "step: 1300 \ttraining acc: [0.22       0.42333333 0.43       0.44333333 0.45       0.44666667]\n",
      "step: 1400 \ttraining acc: [0.17       0.50666667 0.51333333 0.52       0.52       0.52      ]\n",
      "step: 1500 \ttraining acc: [0.19       0.37666667 0.38666667 0.39       0.39333333 0.39666667]\n",
      "step: 1600 \ttraining acc: [0.18666667 0.41333333 0.42333333 0.43333333 0.43       0.41666667]\n",
      "step: 1700 \ttraining acc: [0.12666667 0.4        0.38666667 0.39333333 0.39666667 0.39      ]\n",
      "step: 1800 \ttraining acc: [0.16333333 0.46333333 0.44       0.43666667 0.43333333 0.43666667]\n",
      "step: 1900 \ttraining acc: [0.22       0.45       0.46666667 0.46       0.46666667 0.46666667]\n",
      "step: 2000 \ttraining acc: [0.20333333 0.51666667 0.52666667 0.52333333 0.51666667 0.52      ]\n",
      "Test acc: [0.2068 0.421  0.425  0.4238 0.4236 0.423 ]\n",
      "step: 2100 \ttraining acc: [0.18       0.46       0.47666667 0.48       0.48333333 0.48333333]\n",
      "step: 2200 \ttraining acc: [0.21333333 0.43666667 0.45666667 0.45       0.45       0.45      ]\n",
      "step: 2300 \ttraining acc: [0.2        0.54       0.52666667 0.52666667 0.53333333 0.53      ]\n",
      "step: 2400 \ttraining acc: [0.17666667 0.51666667 0.53       0.53       0.53       0.53333333]\n",
      "step: 0 \ttraining acc: [0.19333333 0.55333333 0.55666667 0.54333333 0.53       0.53333333]\n",
      "Test acc: [0.204  0.4385 0.4429 0.4443 0.444  0.444 ]\n",
      "step: 100 \ttraining acc: [0.21666667 0.48333333 0.46666667 0.46       0.47333333 0.48      ]\n",
      "step: 200 \ttraining acc: [0.21666667 0.49       0.49       0.48666667 0.48666667 0.48666667]\n",
      "step: 300 \ttraining acc: [0.13333333 0.49333333 0.5        0.51333333 0.51666667 0.51666667]\n",
      "step: 400 \ttraining acc: [0.13333333 0.44333333 0.44       0.43666667 0.44       0.44      ]\n",
      "step: 500 \ttraining acc: [0.20666667 0.50666667 0.52333333 0.52333333 0.51666667 0.51      ]\n",
      "step: 600 \ttraining acc: [0.19       0.48       0.48666667 0.49333333 0.49       0.49      ]\n",
      "step: 700 \ttraining acc: [0.16666667 0.40333333 0.40666667 0.41666667 0.42       0.41666667]\n",
      "step: 800 \ttraining acc: [0.29333333 0.50333333 0.52       0.51666667 0.51666667 0.52      ]\n",
      "step: 900 \ttraining acc: [0.17333333 0.46       0.46       0.46333333 0.47       0.46666667]\n",
      "step: 1000 \ttraining acc: [0.16666667 0.5        0.49666667 0.51       0.50666667 0.51      ]\n",
      "Test acc: [0.2018 0.4487 0.453  0.4521 0.4524 0.451 ]\n",
      "step: 1100 \ttraining acc: [0.2        0.51333333 0.50333333 0.49666667 0.49666667 0.5       ]\n",
      "step: 1200 \ttraining acc: [0.23333333 0.42333333 0.43       0.43       0.42666667 0.42333333]\n",
      "step: 1300 \ttraining acc: [0.13333333 0.46       0.45666667 0.47       0.47333333 0.46666667]\n",
      "step: 1400 \ttraining acc: [0.17333333 0.41333333 0.41333333 0.42       0.42333333 0.42666667]\n",
      "step: 1500 \ttraining acc: [0.12333333 0.5        0.49666667 0.49666667 0.5        0.5       ]\n",
      "step: 1600 \ttraining acc: [0.13333333 0.51       0.50666667 0.50333333 0.5        0.5       ]\n",
      "step: 1700 \ttraining acc: [0.19666667 0.54       0.54       0.53666667 0.53333333 0.53      ]\n",
      "step: 1800 \ttraining acc: [0.22       0.56666667 0.56666667 0.56333333 0.56666667 0.56333333]\n",
      "step: 1900 \ttraining acc: [0.11333333 0.47666667 0.47333333 0.47666667 0.47666667 0.48      ]\n",
      "step: 2000 \ttraining acc: [0.29666667 0.57333333 0.56666667 0.56666667 0.57333333 0.57666667]\n",
      "Test acc: [0.1885 0.4458 0.4458 0.4458 0.4446 0.445 ]\n",
      "step: 2100 \ttraining acc: [0.24333333 0.42666667 0.42       0.42666667 0.43       0.43333333]\n",
      "step: 2200 \ttraining acc: [0.15333333 0.46666667 0.47333333 0.46666667 0.46666667 0.47333333]\n",
      "step: 2300 \ttraining acc: [0.16666667 0.38333333 0.38       0.37666667 0.37666667 0.37666667]\n",
      "step: 2400 \ttraining acc: [0.16       0.58666667 0.57666667 0.58       0.57333333 0.57666667]\n",
      "step: 0 \ttraining acc: [0.20333333 0.5        0.50666667 0.49666667 0.49666667 0.49666667]\n",
      "Test acc: [0.2021 0.459  0.462  0.4614 0.4614 0.4614]\n",
      "step: 100 \ttraining acc: [0.13333333 0.53333333 0.52666667 0.53333333 0.53333333 0.54333333]\n",
      "step: 200 \ttraining acc: [0.17       0.50666667 0.50666667 0.51       0.51       0.51      ]\n",
      "step: 300 \ttraining acc: [0.16333333 0.46666667 0.47       0.47333333 0.47333333 0.47666667]\n",
      "step: 400 \ttraining acc: [0.17333333 0.50333333 0.50666667 0.50333333 0.50333333 0.49666667]\n",
      "step: 500 \ttraining acc: [0.26333333 0.47       0.47       0.46333333 0.46333333 0.46      ]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 600 \ttraining acc: [0.18       0.5        0.50666667 0.50666667 0.49666667 0.49666667]\n",
      "step: 700 \ttraining acc: [0.3        0.4        0.40333333 0.40666667 0.40666667 0.40666667]\n",
      "step: 800 \ttraining acc: [0.29       0.44333333 0.44333333 0.44666667 0.44666667 0.44666667]\n",
      "step: 900 \ttraining acc: [0.21       0.34666667 0.32333333 0.33333333 0.33666667 0.34333333]\n",
      "step: 1000 \ttraining acc: [0.24       0.44333333 0.44333333 0.44333333 0.44333333 0.44666667]\n",
      "Test acc: [0.2023 0.4485 0.45   0.449  0.4487 0.4487]\n",
      "step: 1100 \ttraining acc: [0.28       0.49       0.49333333 0.50333333 0.50333333 0.51      ]\n",
      "step: 1200 \ttraining acc: [0.19       0.47333333 0.48       0.47666667 0.47666667 0.48      ]\n",
      "step: 1300 \ttraining acc: [0.21666667 0.59333333 0.59333333 0.59666667 0.60666667 0.60666667]\n",
      "step: 1400 \ttraining acc: [0.15666667 0.55       0.54666667 0.55333333 0.55333333 0.55333333]\n",
      "step: 1500 \ttraining acc: [0.15333333 0.52       0.52       0.52       0.52       0.52      ]\n",
      "step: 1600 \ttraining acc: [0.19666667 0.65666667 0.65666667 0.66       0.65666667 0.65666667]\n",
      "step: 1700 \ttraining acc: [0.19333333 0.62666667 0.62333333 0.62333333 0.62666667 0.62333333]\n",
      "step: 1800 \ttraining acc: [0.19666667 0.47666667 0.47       0.46333333 0.46       0.46      ]\n",
      "step: 1900 \ttraining acc: [0.14666667 0.47666667 0.48666667 0.48666667 0.49       0.49      ]\n",
      "step: 2000 \ttraining acc: [0.24333333 0.48       0.48       0.48333333 0.48333333 0.48666667]\n",
      "Test acc: [0.1821 0.4548 0.4563 0.4556 0.4563 0.4563]\n",
      "step: 2100 \ttraining acc: [0.18666667 0.5        0.51       0.50666667 0.5        0.49666667]\n",
      "step: 2200 \ttraining acc: [0.26       0.46       0.46666667 0.46666667 0.47       0.47333333]\n",
      "step: 2300 \ttraining acc: [0.23333333 0.59666667 0.59666667 0.59666667 0.59666667 0.59      ]\n",
      "step: 2400 \ttraining acc: [0.16666667 0.51333333 0.50666667 0.50666667 0.50333333 0.49333333]\n",
      "step: 0 \ttraining acc: [0.23666667 0.54333333 0.55333333 0.55333333 0.55       0.54666667]\n",
      "Test acc: [0.2051 0.4658 0.469  0.4692 0.4717 0.4717]\n",
      "step: 100 \ttraining acc: [0.18666667 0.50333333 0.50333333 0.51333333 0.51       0.51666667]\n",
      "step: 200 \ttraining acc: [0.32       0.61333333 0.61666667 0.62       0.62666667 0.62666667]\n",
      "step: 300 \ttraining acc: [0.17333333 0.52333333 0.52666667 0.53       0.53       0.53333333]\n",
      "step: 400 \ttraining acc: [0.24333333 0.52666667 0.52666667 0.52333333 0.52666667 0.52666667]\n",
      "step: 500 \ttraining acc: [0.19666667 0.52       0.52333333 0.52333333 0.52       0.52      ]\n",
      "step: 600 \ttraining acc: [0.15       0.41       0.41       0.41333333 0.41333333 0.41666667]\n",
      "step: 700 \ttraining acc: [0.16       0.55666667 0.55666667 0.55666667 0.55666667 0.55666667]\n",
      "step: 800 \ttraining acc: [0.17333333 0.48333333 0.48333333 0.48333333 0.48       0.48333333]\n",
      "step: 900 \ttraining acc: [0.24333333 0.56       0.57       0.57       0.57333333 0.57666667]\n",
      "step: 1000 \ttraining acc: [0.27       0.52       0.52333333 0.52333333 0.53333333 0.53333333]\n",
      "Test acc: [0.201  0.4766 0.4746 0.4744 0.4756 0.4766]\n",
      "step: 1100 \ttraining acc: [0.19       0.37333333 0.37       0.37       0.36666667 0.36333333]\n",
      "step: 1200 \ttraining acc: [0.16666667 0.66       0.66333333 0.66333333 0.67666667 0.67666667]\n",
      "step: 1300 \ttraining acc: [0.16333333 0.56666667 0.56       0.56333333 0.56333333 0.56333333]\n",
      "step: 1400 \ttraining acc: [0.25       0.54333333 0.55333333 0.55666667 0.55333333 0.55      ]\n",
      "step: 1500 \ttraining acc: [0.21       0.62666667 0.63666667 0.64       0.64333333 0.64666667]\n",
      "step: 1600 \ttraining acc: [0.18666667 0.48666667 0.48666667 0.49       0.49       0.49      ]\n",
      "step: 1700 \ttraining acc: [0.17333333 0.53333333 0.53333333 0.53666667 0.53333333 0.53333333]\n",
      "step: 1800 \ttraining acc: [0.21       0.52666667 0.52333333 0.52       0.52       0.51333333]\n",
      "step: 1900 \ttraining acc: [0.18       0.50666667 0.5        0.50333333 0.50333333 0.5       ]\n",
      "step: 2000 \ttraining acc: [0.25333333 0.55       0.56333333 0.57       0.57       0.57      ]\n",
      "Test acc: [0.208  0.4832 0.484  0.485  0.4854 0.4854]\n",
      "step: 2100 \ttraining acc: [0.18333333 0.53       0.53       0.53666667 0.53666667 0.53666667]\n",
      "step: 2200 \ttraining acc: [0.17       0.58333333 0.59333333 0.59       0.59333333 0.59      ]\n",
      "step: 2300 \ttraining acc: [0.17666667 0.44333333 0.44       0.44       0.44666667 0.44666667]\n",
      "step: 2400 \ttraining acc: [0.20666667 0.55666667 0.55333333 0.55333333 0.55       0.54666667]\n",
      "step: 0 \ttraining acc: [0.19666667 0.51       0.50333333 0.50333333 0.50666667 0.50666667]\n",
      "Test acc: [0.188  0.4753 0.4756 0.4734 0.474  0.4739]\n",
      "step: 100 \ttraining acc: [0.18666667 0.53       0.53       0.53       0.53       0.53666667]\n",
      "step: 200 \ttraining acc: [0.11       0.48333333 0.48666667 0.48666667 0.48666667 0.49666667]\n",
      "step: 300 \ttraining acc: [0.15333333 0.57       0.56666667 0.56666667 0.56666667 0.56666667]\n",
      "step: 400 \ttraining acc: [0.25333333 0.50666667 0.50666667 0.50666667 0.50666667 0.50333333]\n",
      "step: 500 \ttraining acc: [0.21       0.64333333 0.64666667 0.63666667 0.63666667 0.63333333]\n",
      "step: 600 \ttraining acc: [0.19666667 0.54       0.54       0.53333333 0.53666667 0.53666667]\n",
      "step: 700 \ttraining acc: [0.2        0.47666667 0.48666667 0.49       0.49666667 0.49666667]\n",
      "step: 800 \ttraining acc: [0.17666667 0.62666667 0.62666667 0.63       0.63       0.63      ]\n",
      "step: 900 \ttraining acc: [0.17333333 0.63       0.61666667 0.61333333 0.61       0.61      ]\n",
      "step: 1000 \ttraining acc: [0.15333333 0.56666667 0.56333333 0.56333333 0.56333333 0.56333333]\n",
      "Test acc: [0.2023 0.4656 0.467  0.4683 0.4688 0.4678]\n",
      "step: 1100 \ttraining acc: [0.24       0.62       0.62666667 0.62666667 0.62666667 0.62666667]\n",
      "step: 1200 \ttraining acc: [0.26333333 0.54       0.54       0.54666667 0.54666667 0.54666667]\n",
      "step: 1300 \ttraining acc: [0.18       0.54333333 0.53666667 0.54333333 0.54333333 0.54      ]\n",
      "step: 1400 \ttraining acc: [0.24666667 0.59       0.59       0.59333333 0.59333333 0.59      ]\n",
      "step: 1500 \ttraining acc: [0.20333333 0.51666667 0.52       0.51       0.50333333 0.5       ]\n",
      "step: 1600 \ttraining acc: [0.27666667 0.56333333 0.56666667 0.57       0.57       0.57      ]\n",
      "step: 1700 \ttraining acc: [0.29333333 0.51       0.50666667 0.51333333 0.51333333 0.51333333]\n",
      "step: 1800 \ttraining acc: [0.21       0.59333333 0.59       0.59333333 0.59333333 0.59333333]\n",
      "step: 1900 \ttraining acc: [0.21333333 0.62333333 0.62       0.62333333 0.62       0.62      ]\n",
      "step: 2000 \ttraining acc: [0.24       0.55       0.55333333 0.56333333 0.56666667 0.57      ]\n",
      "Test acc: [0.1971 0.4758 0.4763 0.4773 0.477  0.478 ]\n",
      "step: 2100 \ttraining acc: [0.21       0.64333333 0.64333333 0.64333333 0.64333333 0.64333333]\n",
      "step: 2200 \ttraining acc: [0.12666667 0.52333333 0.52       0.52333333 0.52       0.52      ]\n",
      "step: 2300 \ttraining acc: [0.29333333 0.54       0.54333333 0.54333333 0.55       0.55      ]\n",
      "step: 2400 \ttraining acc: [0.23666667 0.45666667 0.46       0.45666667 0.46333333 0.46333333]\n",
      "step: 0 \ttraining acc: [0.29666667 0.52333333 0.52666667 0.52666667 0.52666667 0.52666667]\n",
      "Test acc: [0.1996 0.4736 0.4724 0.4736 0.4731 0.4736]\n",
      "step: 100 \ttraining acc: [0.21666667 0.45666667 0.46666667 0.47       0.47333333 0.47333333]\n",
      "step: 200 \ttraining acc: [0.2        0.64333333 0.64333333 0.64333333 0.64333333 0.64333333]\n",
      "step: 300 \ttraining acc: [0.14333333 0.55       0.55       0.54666667 0.55       0.55      ]\n",
      "step: 400 \ttraining acc: [0.17333333 0.52666667 0.51666667 0.51333333 0.51666667 0.51      ]\n",
      "step: 500 \ttraining acc: [0.25666667 0.53666667 0.53666667 0.53333333 0.53333333 0.53333333]\n",
      "step: 600 \ttraining acc: [0.24       0.50666667 0.50666667 0.50666667 0.50666667 0.50666667]\n",
      "step: 700 \ttraining acc: [0.21       0.60333333 0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 800 \ttraining acc: [0.12333333 0.52       0.51666667 0.52       0.52666667 0.53333333]\n",
      "step: 900 \ttraining acc: [0.27       0.62       0.63666667 0.64333333 0.64666667 0.64666667]\n",
      "step: 1000 \ttraining acc: [0.19333333 0.64       0.64       0.64       0.63666667 0.63666667]\n",
      "Test acc: [0.2062 0.4731 0.4753 0.477  0.4785 0.4788]\n",
      "step: 1100 \ttraining acc: [0.19333333 0.55666667 0.55666667 0.55333333 0.55666667 0.55333333]\n",
      "step: 1200 \ttraining acc: [0.18       0.51666667 0.52       0.52666667 0.52333333 0.52333333]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 1300 \ttraining acc: [0.13666667 0.65333333 0.65333333 0.65       0.65       0.64666667]\n",
      "step: 1400 \ttraining acc: [0.13333333 0.59       0.59666667 0.6        0.59666667 0.59666667]\n",
      "step: 1500 \ttraining acc: [0.25       0.53       0.52       0.52       0.51666667 0.51666667]\n",
      "step: 1600 \ttraining acc: [0.19       0.60666667 0.60666667 0.60666667 0.60666667 0.60666667]\n",
      "step: 1700 \ttraining acc: [0.19666667 0.54333333 0.54333333 0.54333333 0.54       0.53666667]\n",
      "step: 1800 \ttraining acc: [0.12333333 0.51333333 0.51333333 0.51333333 0.52       0.52      ]\n",
      "step: 1900 \ttraining acc: [0.25666667 0.57       0.57       0.57       0.57       0.56666667]\n",
      "step: 2000 \ttraining acc: [0.22333333 0.58333333 0.58666667 0.59333333 0.59       0.59333333]\n",
      "Test acc: [0.2057 0.4812 0.4822 0.483  0.4834 0.4836]\n",
      "step: 2100 \ttraining acc: [0.22       0.52666667 0.52666667 0.52333333 0.52       0.52      ]\n",
      "step: 2200 \ttraining acc: [0.21       0.49333333 0.49666667 0.49666667 0.5        0.5       ]\n",
      "step: 2300 \ttraining acc: [0.17333333 0.45333333 0.45333333 0.46       0.45666667 0.45333333]\n",
      "step: 2400 \ttraining acc: [0.25666667 0.53333333 0.53666667 0.54       0.54       0.53666667]\n",
      "step: 0 \ttraining acc: [0.16333333 0.58333333 0.59       0.6        0.6        0.60333333]\n",
      "Test acc: [0.1824 0.484  0.4849 0.4856 0.4863 0.4858]\n",
      "step: 100 \ttraining acc: [0.17333333 0.43333333 0.43       0.43333333 0.43333333 0.43333333]\n",
      "step: 200 \ttraining acc: [0.21 0.5  0.5  0.5  0.5  0.5 ]\n",
      "step: 300 \ttraining acc: [0.17666667 0.51       0.51333333 0.50666667 0.50333333 0.5       ]\n",
      "step: 400 \ttraining acc: [0.23333333 0.56666667 0.57       0.57       0.57       0.57      ]\n",
      "step: 500 \ttraining acc: [0.19       0.58666667 0.58333333 0.58333333 0.58333333 0.58      ]\n",
      "step: 600 \ttraining acc: [0.17       0.73333333 0.73333333 0.73333333 0.73666667 0.73333333]\n",
      "step: 700 \ttraining acc: [0.17666667 0.55666667 0.56       0.55333333 0.55       0.55666667]\n",
      "step: 800 \ttraining acc: [0.29333333 0.58666667 0.58333333 0.58333333 0.58333333 0.59      ]\n",
      "step: 900 \ttraining acc: [0.14       0.6        0.59       0.59666667 0.59666667 0.59666667]\n",
      "step: 1000 \ttraining acc: [0.14666667 0.59       0.59666667 0.60333333 0.60333333 0.60333333]\n",
      "Test acc: [0.191  0.4722 0.4734 0.4734 0.474  0.4749]\n",
      "step: 1100 \ttraining acc: [0.23333333 0.55666667 0.55666667 0.55333333 0.55       0.55333333]\n",
      "step: 1200 \ttraining acc: [0.19666667 0.54       0.54333333 0.54333333 0.54       0.54      ]\n",
      "step: 1300 \ttraining acc: [0.19666667 0.53666667 0.53333333 0.53333333 0.53333333 0.53666667]\n",
      "step: 1400 \ttraining acc: [0.19       0.48666667 0.48666667 0.48666667 0.48666667 0.48666667]\n",
      "step: 1500 \ttraining acc: [0.15666667 0.64       0.64666667 0.64333333 0.64       0.64      ]\n",
      "step: 1600 \ttraining acc: [0.16666667 0.49       0.49       0.49       0.49       0.49      ]\n",
      "step: 1700 \ttraining acc: [0.26333333 0.47333333 0.47333333 0.47333333 0.47333333 0.47333333]\n",
      "step: 1800 \ttraining acc: [0.22666667 0.53333333 0.53333333 0.53666667 0.53666667 0.53666667]\n",
      "step: 1900 \ttraining acc: [0.16666667 0.53666667 0.53666667 0.53666667 0.53333333 0.53333333]\n",
      "step: 2000 \ttraining acc: [0.15333333 0.47333333 0.48       0.47666667 0.47666667 0.47333333]\n",
      "Test acc: [0.2053 0.472  0.471  0.4717 0.4722 0.4717]\n",
      "step: 2100 \ttraining acc: [0.24666667 0.64       0.64       0.63666667 0.63666667 0.63666667]\n",
      "step: 2200 \ttraining acc: [0.20333333 0.58666667 0.58333333 0.58       0.58       0.58333333]\n",
      "step: 2300 \ttraining acc: [0.21       0.61       0.61333333 0.61333333 0.61666667 0.61666667]\n",
      "step: 2400 \ttraining acc: [0.11666667 0.59666667 0.59666667 0.59666667 0.59333333 0.59333333]\n",
      "step: 0 \ttraining acc: [0.26333333 0.52       0.52333333 0.52666667 0.52666667 0.52666667]\n",
      "Test acc: [0.2173 0.4844 0.4834 0.4841 0.4849 0.4846]\n",
      "step: 100 \ttraining acc: [0.18666667 0.52666667 0.52666667 0.52666667 0.52333333 0.52      ]\n",
      "step: 200 \ttraining acc: [0.17       0.38666667 0.38666667 0.38666667 0.38666667 0.38666667]\n",
      "step: 300 \ttraining acc: [0.22       0.46333333 0.46333333 0.46       0.46333333 0.46333333]\n",
      "step: 400 \ttraining acc: [0.16666667 0.52333333 0.52666667 0.52666667 0.52333333 0.53      ]\n",
      "step: 500 \ttraining acc: [0.16333333 0.53       0.53       0.53333333 0.53333333 0.53666667]\n",
      "step: 600 \ttraining acc: [0.13333333 0.62333333 0.62333333 0.62333333 0.62       0.62      ]\n",
      "step: 700 \ttraining acc: [0.17666667 0.55       0.55333333 0.55333333 0.55333333 0.55666667]\n",
      "step: 800 \ttraining acc: [0.31666667 0.50333333 0.51       0.51       0.51       0.51      ]\n",
      "step: 900 \ttraining acc: [0.11666667 0.58333333 0.57666667 0.57333333 0.57333333 0.57333333]\n",
      "step: 1000 \ttraining acc: [0.22333333 0.56333333 0.56       0.55666667 0.55666667 0.56      ]\n",
      "Test acc: [0.2078 0.4795 0.4792 0.4802 0.481  0.4817]\n",
      "step: 1100 \ttraining acc: [0.18666667 0.55333333 0.55666667 0.56       0.56666667 0.56666667]\n",
      "step: 1200 \ttraining acc: [0.14666667 0.52       0.52       0.51666667 0.51666667 0.51333333]\n",
      "step: 1300 \ttraining acc: [0.2        0.53666667 0.54       0.53666667 0.53333333 0.53      ]\n",
      "step: 1400 \ttraining acc: [0.23666667 0.56333333 0.55333333 0.55333333 0.55333333 0.54666667]\n",
      "step: 1500 \ttraining acc: [0.14333333 0.52333333 0.52333333 0.52       0.52333333 0.52333333]\n",
      "step: 1600 \ttraining acc: [0.16666667 0.60666667 0.60666667 0.60666667 0.60333333 0.60666667]\n",
      "step: 1700 \ttraining acc: [0.16666667 0.66333333 0.66333333 0.66       0.66       0.66333333]\n",
      "step: 1800 \ttraining acc: [0.18666667 0.59333333 0.59666667 0.59666667 0.6        0.60666667]\n",
      "step: 1900 \ttraining acc: [0.18333333 0.49       0.49       0.49333333 0.49666667 0.49333333]\n",
      "step: 2000 \ttraining acc: [0.20666667 0.57666667 0.57       0.57       0.57333333 0.57666667]\n",
      "Test acc: [0.1974 0.4888 0.4897 0.4905 0.4905 0.4915]\n",
      "step: 2100 \ttraining acc: [0.22       0.57       0.57       0.57       0.57333333 0.57333333]\n",
      "step: 2200 \ttraining acc: [0.22       0.60666667 0.61       0.60666667 0.60666667 0.60666667]\n",
      "step: 2300 \ttraining acc: [0.15666667 0.49666667 0.49666667 0.5        0.5        0.5       ]\n",
      "step: 2400 \ttraining acc: [0.23       0.50333333 0.50666667 0.50666667 0.50666667 0.51      ]\n",
      "step: 0 \ttraining acc: [0.18       0.66666667 0.66666667 0.67       0.67       0.66666667]\n",
      "Test acc: [0.2196 0.4744 0.4756 0.475  0.4758 0.4763]\n",
      "step: 100 \ttraining acc: [0.16666667 0.57666667 0.57666667 0.57666667 0.57666667 0.57666667]\n",
      "step: 200 \ttraining acc: [0.17       0.53666667 0.53666667 0.54       0.53666667 0.53666667]\n",
      "step: 300 \ttraining acc: [0.13666667 0.56       0.56333333 0.56333333 0.56       0.56      ]\n",
      "step: 400 \ttraining acc: [0.19666667 0.57333333 0.57666667 0.57666667 0.57666667 0.57666667]\n",
      "step: 500 \ttraining acc: [0.27666667 0.5        0.50666667 0.50666667 0.50333333 0.50333333]\n",
      "step: 600 \ttraining acc: [0.17333333 0.52       0.52       0.51666667 0.52666667 0.53      ]\n",
      "step: 700 \ttraining acc: [0.24333333 0.52666667 0.53       0.53       0.53       0.53      ]\n",
      "step: 800 \ttraining acc: [0.2        0.55333333 0.55       0.55       0.55333333 0.55333333]\n",
      "step: 900 \ttraining acc: [0.18       0.51666667 0.52333333 0.52333333 0.52       0.52333333]\n",
      "step: 1000 \ttraining acc: [0.16       0.50333333 0.50333333 0.50333333 0.50333333 0.50333333]\n",
      "Test acc: [0.1965 0.4854 0.486  0.4873 0.487  0.4868]\n",
      "step: 1100 \ttraining acc: [0.22666667 0.58       0.57666667 0.57666667 0.57666667 0.57666667]\n",
      "step: 1200 \ttraining acc: [0.14       0.57333333 0.57333333 0.57666667 0.58       0.58666667]\n",
      "step: 1300 \ttraining acc: [0.22666667 0.49333333 0.49       0.49       0.49       0.49      ]\n",
      "step: 1400 \ttraining acc: [0.21333333 0.54666667 0.54666667 0.54666667 0.54666667 0.54333333]\n",
      "step: 1500 \ttraining acc: [0.22333333 0.55333333 0.56333333 0.56666667 0.56666667 0.56666667]\n",
      "step: 1600 \ttraining acc: [0.27333333 0.59333333 0.59333333 0.59       0.59       0.59      ]\n",
      "step: 1700 \ttraining acc: [0.19666667 0.49666667 0.5        0.5        0.50333333 0.50333333]\n",
      "step: 1800 \ttraining acc: [0.14333333 0.49       0.49333333 0.49       0.49       0.49      ]\n",
      "step: 1900 \ttraining acc: [0.20333333 0.65666667 0.65       0.65       0.65       0.65      ]\n",
      "step: 2000 \ttraining acc: [0.15       0.58333333 0.58       0.57333333 0.58       0.58      ]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test acc: [0.1975 0.481  0.4827 0.4834 0.4832 0.483 ]\n",
      "step: 2100 \ttraining acc: [0.26       0.51       0.51333333 0.51333333 0.51333333 0.51333333]\n",
      "step: 2200 \ttraining acc: [0.21       0.53333333 0.53333333 0.53666667 0.54       0.54333333]\n",
      "step: 2300 \ttraining acc: [0.16333333 0.61333333 0.61333333 0.61666667 0.61333333 0.61333333]\n",
      "step: 2400 \ttraining acc: [0.19666667 0.56       0.55666667 0.55666667 0.55       0.55      ]\n",
      "step: 0 \ttraining acc: [0.17666667 0.58       0.57333333 0.57       0.56666667 0.57      ]\n",
      "Test acc: [0.2136 0.485  0.4863 0.4863 0.487  0.4873]\n",
      "step: 100 \ttraining acc: [0.2        0.57       0.57       0.57       0.57       0.56666667]\n",
      "step: 200 \ttraining acc: [0.12       0.52666667 0.52666667 0.52       0.52       0.52      ]\n",
      "step: 300 \ttraining acc: [0.17666667 0.55       0.55       0.54666667 0.54666667 0.54      ]\n",
      "step: 400 \ttraining acc: [0.12666667 0.59       0.58666667 0.58333333 0.58666667 0.58666667]\n",
      "step: 500 \ttraining acc: [0.13       0.58       0.57666667 0.57666667 0.57666667 0.57666667]\n",
      "step: 600 \ttraining acc: [0.23666667 0.55       0.55333333 0.55333333 0.55333333 0.55333333]\n",
      "step: 700 \ttraining acc: [0.15       0.57       0.57       0.58333333 0.58666667 0.58666667]\n",
      "step: 800 \ttraining acc: [0.19       0.55333333 0.55333333 0.55333333 0.55333333 0.55333333]\n",
      "step: 900 \ttraining acc: [0.29333333 0.63       0.63       0.63333333 0.63333333 0.63      ]\n",
      "step: 1000 \ttraining acc: [0.24666667 0.59333333 0.59333333 0.59333333 0.59666667 0.59666667]\n",
      "Test acc: [0.1976 0.485  0.4854 0.4856 0.4863 0.487 ]\n",
      "step: 1100 \ttraining acc: [0.2        0.52333333 0.52333333 0.52       0.52       0.52      ]\n",
      "step: 1200 \ttraining acc: [0.22666667 0.44666667 0.44666667 0.45       0.45       0.45      ]\n",
      "step: 1300 \ttraining acc: [0.22333333 0.69333333 0.69666667 0.69666667 0.69333333 0.69333333]\n",
      "step: 1400 \ttraining acc: [0.18       0.61333333 0.61       0.60666667 0.60333333 0.60333333]\n",
      "step: 1500 \ttraining acc: [0.21333333 0.52       0.52333333 0.52       0.52333333 0.52333333]\n",
      "step: 1600 \ttraining acc: [0.19       0.49333333 0.49333333 0.49333333 0.49333333 0.49333333]\n",
      "step: 1700 \ttraining acc: [0.13       0.47       0.47333333 0.47666667 0.47666667 0.47666667]\n",
      "step: 1800 \ttraining acc: [0.2        0.51666667 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 1900 \ttraining acc: [0.20666667 0.57666667 0.57666667 0.57666667 0.58       0.58333333]\n",
      "step: 2000 \ttraining acc: [0.10666667 0.48666667 0.48666667 0.48666667 0.48666667 0.48666667]\n",
      "Test acc: [0.2205 0.4846 0.4844 0.485  0.4858 0.485 ]\n",
      "step: 2100 \ttraining acc: [0.26       0.56333333 0.56       0.56       0.56       0.56      ]\n",
      "step: 2200 \ttraining acc: [0.13666667 0.56333333 0.55333333 0.56       0.56       0.56      ]\n",
      "step: 2300 \ttraining acc: [0.20333333 0.63       0.62666667 0.63       0.63       0.62666667]\n",
      "step: 2400 \ttraining acc: [0.23333333 0.51       0.51333333 0.51333333 0.51666667 0.51666667]\n",
      "step: 0 \ttraining acc: [0.16 0.51 0.51 0.51 0.51 0.51]\n",
      "Test acc: [0.2006 0.4832 0.4849 0.4856 0.4854 0.4854]\n",
      "step: 100 \ttraining acc: [0.28       0.54       0.53666667 0.53333333 0.53666667 0.53666667]\n",
      "step: 200 \ttraining acc: [0.15333333 0.63       0.63       0.62666667 0.62666667 0.62333333]\n",
      "step: 300 \ttraining acc: [0.18666667 0.55666667 0.55666667 0.55       0.55       0.55      ]\n",
      "step: 400 \ttraining acc: [0.17       0.48666667 0.49       0.49       0.49       0.49      ]\n",
      "step: 500 \ttraining acc: [0.19       0.54333333 0.54333333 0.54333333 0.54333333 0.54666667]\n",
      "step: 600 \ttraining acc: [0.12333333 0.56666667 0.56333333 0.56666667 0.56666667 0.56666667]\n",
      "step: 700 \ttraining acc: [0.12666667 0.56333333 0.56666667 0.57       0.56333333 0.56      ]\n",
      "step: 800 \ttraining acc: [0.22666667 0.61666667 0.61666667 0.61666667 0.61333333 0.61333333]\n",
      "step: 900 \ttraining acc: [0.23       0.65666667 0.66333333 0.66333333 0.66666667 0.66666667]\n",
      "step: 1000 \ttraining acc: [0.17666667 0.71333333 0.71333333 0.71333333 0.71       0.71333333]\n",
      "Test acc: [0.2003 0.4822 0.483  0.4824 0.4832 0.483 ]\n",
      "step: 1100 \ttraining acc: [0.25       0.50333333 0.50666667 0.50333333 0.50333333 0.50333333]\n",
      "step: 1200 \ttraining acc: [0.2        0.56666667 0.56666667 0.56666667 0.56666667 0.57      ]\n",
      "step: 1300 \ttraining acc: [0.15333333 0.61       0.60666667 0.60666667 0.60666667 0.61      ]\n",
      "step: 1400 \ttraining acc: [0.12666667 0.59       0.58666667 0.58666667 0.58666667 0.58666667]\n",
      "step: 1500 \ttraining acc: [0.14333333 0.66333333 0.66666667 0.66333333 0.66666667 0.66666667]\n",
      "step: 1600 \ttraining acc: [0.17       0.55666667 0.56       0.56       0.55666667 0.55666667]\n",
      "step: 1700 \ttraining acc: [0.23       0.67       0.67       0.67666667 0.67666667 0.68666667]\n",
      "step: 1800 \ttraining acc: [0.18       0.53333333 0.53333333 0.53333333 0.53333333 0.53333333]\n",
      "step: 1900 \ttraining acc: [0.13333333 0.54333333 0.54       0.54       0.54       0.54333333]\n",
      "step: 2000 \ttraining acc: [0.17666667 0.67       0.67       0.67       0.67       0.67      ]\n",
      "Test acc: [0.2097 0.4832 0.4836 0.4841 0.4849 0.4849]\n",
      "step: 2100 \ttraining acc: [0.17       0.60333333 0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 2200 \ttraining acc: [0.22666667 0.58333333 0.58333333 0.58666667 0.58666667 0.58666667]\n",
      "step: 2300 \ttraining acc: [0.15333333 0.55       0.55333333 0.55333333 0.55666667 0.56666667]\n",
      "step: 2400 \ttraining acc: [0.23666667 0.57       0.57       0.57       0.57       0.57      ]\n",
      "step: 0 \ttraining acc: [0.14333333 0.64       0.64       0.64       0.64       0.64      ]\n",
      "Test acc: [0.2047 0.4822 0.484  0.4844 0.4846 0.4846]\n",
      "step: 100 \ttraining acc: [0.12333333 0.59       0.59       0.59       0.58666667 0.58666667]\n",
      "step: 200 \ttraining acc: [0.17666667 0.54333333 0.54       0.54333333 0.54333333 0.54333333]\n",
      "step: 300 \ttraining acc: [0.16666667 0.56       0.56       0.55333333 0.54666667 0.55      ]\n",
      "step: 400 \ttraining acc: [0.27333333 0.52333333 0.52666667 0.52666667 0.52666667 0.52666667]\n",
      "step: 500 \ttraining acc: [0.09666667 0.62       0.61666667 0.61666667 0.62333333 0.62333333]\n",
      "step: 600 \ttraining acc: [0.14       0.58333333 0.58333333 0.58333333 0.58333333 0.58666667]\n",
      "step: 700 \ttraining acc: [0.17       0.46666667 0.46333333 0.46333333 0.46333333 0.46333333]\n",
      "step: 800 \ttraining acc: [0.16       0.64666667 0.65       0.64666667 0.64666667 0.64333333]\n",
      "step: 900 \ttraining acc: [0.25       0.58       0.58       0.58       0.57666667 0.58      ]\n",
      "step: 1000 \ttraining acc: [0.31333333 0.62666667 0.62666667 0.62666667 0.62333333 0.62333333]\n",
      "Test acc: [0.2196 0.4849 0.4858 0.4863 0.4866 0.4878]\n",
      "step: 1100 \ttraining acc: [0.15333333 0.63333333 0.63666667 0.63       0.63       0.63      ]\n",
      "step: 1200 \ttraining acc: [0.20666667 0.65       0.65333333 0.65333333 0.65666667 0.66      ]\n",
      "step: 1300 \ttraining acc: [0.14666667 0.51       0.50666667 0.50666667 0.50666667 0.50666667]\n",
      "step: 1400 \ttraining acc: [0.22666667 0.58333333 0.58333333 0.58       0.58       0.58666667]\n",
      "step: 1500 \ttraining acc: [0.22666667 0.55       0.55       0.54666667 0.54666667 0.54666667]\n",
      "step: 1600 \ttraining acc: [0.15333333 0.62       0.62       0.62       0.62       0.62      ]\n",
      "step: 1700 \ttraining acc: [0.21333333 0.54333333 0.54333333 0.54666667 0.54666667 0.54666667]\n",
      "step: 1800 \ttraining acc: [0.09666667 0.53666667 0.53666667 0.53666667 0.53666667 0.53333333]\n",
      "step: 1900 \ttraining acc: [0.23666667 0.51       0.51       0.51       0.51       0.51      ]\n",
      "step: 2000 \ttraining acc: [0.2  0.61 0.61 0.61 0.61 0.61]\n",
      "Test acc: [0.2084 0.4836 0.4846 0.484  0.4846 0.4844]\n",
      "step: 2100 \ttraining acc: [0.16       0.54       0.53333333 0.53333333 0.53333333 0.53333333]\n",
      "step: 2200 \ttraining acc: [0.18333333 0.62       0.62333333 0.62333333 0.62666667 0.63      ]\n",
      "step: 2300 \ttraining acc: [0.24333333 0.57333333 0.57333333 0.57333333 0.57333333 0.57333333]\n",
      "step: 2400 \ttraining acc: [0.26666667 0.63666667 0.63666667 0.63666667 0.63333333 0.63333333]\n",
      "step: 0 \ttraining acc: [0.12666667 0.52666667 0.52666667 0.52666667 0.52333333 0.52333333]\n",
      "Test acc: [0.1979 0.4834 0.4834 0.484  0.4834 0.484 ]\n",
      "step: 100 \ttraining acc: [0.17       0.50666667 0.50333333 0.49666667 0.49666667 0.49333333]\n",
      "step: 200 \ttraining acc: [0.14333333 0.4        0.39666667 0.39666667 0.39666667 0.39666667]\n",
      "step: 300 \ttraining acc: [0.17666667 0.54333333 0.54333333 0.54       0.53666667 0.53666667]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 400 \ttraining acc: [0.22       0.68       0.68       0.68333333 0.68333333 0.68333333]\n",
      "step: 500 \ttraining acc: [0.25       0.67       0.66666667 0.66666667 0.66666667 0.66666667]\n",
      "step: 600 \ttraining acc: [0.26666667 0.63666667 0.64       0.63666667 0.63       0.63      ]\n",
      "step: 700 \ttraining acc: [0.23 0.6  0.6  0.6  0.6  0.6 ]\n",
      "step: 800 \ttraining acc: [0.29       0.60666667 0.60666667 0.6        0.6        0.60666667]\n",
      "step: 900 \ttraining acc: [0.2        0.52       0.52       0.52       0.51666667 0.51333333]\n",
      "step: 1000 \ttraining acc: [0.28333333 0.57666667 0.57666667 0.58       0.58       0.58666667]\n",
      "Test acc: [0.1964 0.48   0.4814 0.482  0.4814 0.4812]\n",
      "step: 1100 \ttraining acc: [0.26333333 0.65       0.65333333 0.65333333 0.65333333 0.65333333]\n",
      "step: 1200 \ttraining acc: [0.20333333 0.41666667 0.42333333 0.43666667 0.44       0.44      ]\n",
      "step: 1300 \ttraining acc: [0.23333333 0.50333333 0.50333333 0.50333333 0.50333333 0.50333333]\n",
      "step: 1400 \ttraining acc: [0.22       0.48666667 0.48666667 0.49       0.49       0.49      ]\n",
      "step: 1500 \ttraining acc: [0.10333333 0.61333333 0.61333333 0.61333333 0.61333333 0.61333333]\n",
      "step: 1600 \ttraining acc: [0.17666667 0.51       0.51       0.51       0.51       0.51      ]\n",
      "step: 1700 \ttraining acc: [0.19333333 0.59333333 0.59666667 0.59666667 0.6        0.59666667]\n",
      "step: 1800 \ttraining acc: [0.26666667 0.68       0.68       0.68       0.68       0.68      ]\n",
      "step: 1900 \ttraining acc: [0.26       0.56333333 0.57       0.56666667 0.56666667 0.56666667]\n",
      "step: 2000 \ttraining acc: [0.17666667 0.61333333 0.61666667 0.61333333 0.61       0.61333333]\n",
      "Test acc: [0.1989 0.4824 0.4832 0.483  0.4832 0.483 ]\n",
      "step: 2100 \ttraining acc: [0.15333333 0.56333333 0.55666667 0.56       0.56       0.56      ]\n",
      "step: 2200 \ttraining acc: [0.20333333 0.67333333 0.67666667 0.67666667 0.67666667 0.67666667]\n",
      "step: 2300 \ttraining acc: [0.10333333 0.68       0.68333333 0.69333333 0.69333333 0.69      ]\n",
      "step: 2400 \ttraining acc: [0.24666667 0.60333333 0.60333333 0.60666667 0.60333333 0.60333333]\n",
      "step: 0 \ttraining acc: [0.17666667 0.61       0.61       0.61       0.61       0.61      ]\n",
      "Test acc: [0.2114 0.4817 0.4822 0.4827 0.4832 0.4832]\n",
      "step: 100 \ttraining acc: [0.22666667 0.6        0.6        0.6        0.6        0.6       ]\n",
      "step: 200 \ttraining acc: [0.19       0.63333333 0.64       0.64       0.64       0.63666667]\n",
      "step: 300 \ttraining acc: [0.19       0.51333333 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 400 \ttraining acc: [0.18       0.57333333 0.57333333 0.57       0.57       0.56666667]\n",
      "step: 500 \ttraining acc: [0.26       0.52333333 0.52333333 0.53       0.53       0.53      ]\n",
      "step: 600 \ttraining acc: [0.24666667 0.60666667 0.60666667 0.60666667 0.60666667 0.60666667]\n",
      "step: 700 \ttraining acc: [0.19       0.59       0.59       0.59333333 0.59333333 0.59333333]\n",
      "step: 800 \ttraining acc: [0.17666667 0.58333333 0.58333333 0.58666667 0.58333333 0.58333333]\n",
      "step: 900 \ttraining acc: [0.13666667 0.63       0.63       0.63       0.63       0.63      ]\n",
      "step: 1000 \ttraining acc: [0.23333333 0.67       0.67       0.67       0.67333333 0.67333333]\n",
      "Test acc: [0.1998 0.48   0.4807 0.4814 0.4812 0.4817]\n",
      "step: 1100 \ttraining acc: [0.20666667 0.52666667 0.52333333 0.52333333 0.52333333 0.52333333]\n",
      "step: 1200 \ttraining acc: [0.19666667 0.58333333 0.58333333 0.58333333 0.58       0.58      ]\n",
      "step: 1300 \ttraining acc: [0.31333333 0.52666667 0.52666667 0.52666667 0.52666667 0.52666667]\n",
      "step: 1400 \ttraining acc: [0.18       0.46       0.46       0.46       0.46       0.46333333]\n",
      "step: 1500 \ttraining acc: [0.29666667 0.64       0.64       0.64       0.64       0.64      ]\n",
      "step: 1600 \ttraining acc: [0.22333333 0.55666667 0.55333333 0.55333333 0.55       0.55      ]\n",
      "step: 1700 \ttraining acc: [0.13       0.59       0.58333333 0.58666667 0.58       0.58      ]\n",
      "step: 1800 \ttraining acc: [0.24666667 0.56666667 0.56666667 0.56666667 0.56666667 0.56666667]\n",
      "step: 1900 \ttraining acc: [0.24666667 0.56666667 0.56333333 0.56333333 0.56333333 0.56333333]\n",
      "step: 2000 \ttraining acc: [0.15666667 0.63333333 0.63333333 0.63333333 0.63       0.63      ]\n",
      "Test acc: [0.1881 0.4778 0.4775 0.4778 0.479  0.4792]\n",
      "step: 2100 \ttraining acc: [0.23666667 0.64333333 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 2200 \ttraining acc: [0.12666667 0.67666667 0.67666667 0.67666667 0.67666667 0.67666667]\n",
      "step: 2300 \ttraining acc: [0.22333333 0.64       0.64       0.64       0.63666667 0.63666667]\n",
      "step: 2400 \ttraining acc: [0.13       0.55333333 0.55       0.55       0.55       0.54666667]\n",
      "step: 0 \ttraining acc: [0.31666667 0.53666667 0.53666667 0.53666667 0.54       0.54      ]\n",
      "Test acc: [0.2042 0.4814 0.4814 0.4814 0.482  0.4814]\n",
      "step: 100 \ttraining acc: [0.17       0.58666667 0.59       0.59333333 0.59666667 0.6       ]\n",
      "step: 200 \ttraining acc: [0.17666667 0.61333333 0.61333333 0.61333333 0.61333333 0.61333333]\n",
      "step: 300 \ttraining acc: [0.22       0.53666667 0.53666667 0.53333333 0.53333333 0.53333333]\n",
      "step: 400 \ttraining acc: [0.21333333 0.5        0.50333333 0.5        0.5        0.5       ]\n",
      "step: 500 \ttraining acc: [0.27333333 0.69333333 0.69       0.69666667 0.69333333 0.69333333]\n",
      "step: 600 \ttraining acc: [0.16       0.51666667 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 700 \ttraining acc: [0.24666667 0.51333333 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 800 \ttraining acc: [0.2        0.56333333 0.56333333 0.56333333 0.56333333 0.56333333]\n",
      "step: 900 \ttraining acc: [0.15333333 0.56       0.56666667 0.56666667 0.56666667 0.57      ]\n",
      "step: 1000 \ttraining acc: [0.2        0.59       0.58333333 0.58       0.58333333 0.58      ]\n",
      "Test acc: [0.1963 0.4717 0.472  0.4722 0.4722 0.4731]\n",
      "step: 1100 \ttraining acc: [0.19       0.49       0.49666667 0.49333333 0.49666667 0.49333333]\n",
      "step: 1200 \ttraining acc: [0.24333333 0.54666667 0.54666667 0.54666667 0.54666667 0.54666667]\n",
      "step: 1300 \ttraining acc: [0.34666667 0.71666667 0.71333333 0.72       0.72       0.71666667]\n",
      "step: 1400 \ttraining acc: [0.20666667 0.51       0.51       0.51333333 0.51333333 0.51333333]\n",
      "step: 1500 \ttraining acc: [0.15333333 0.56666667 0.56666667 0.56333333 0.56333333 0.56666667]\n",
      "step: 1600 \ttraining acc: [0.16333333 0.55       0.55333333 0.55666667 0.55666667 0.55666667]\n",
      "step: 1700 \ttraining acc: [0.17333333 0.52       0.52       0.52333333 0.52666667 0.52666667]\n",
      "step: 1800 \ttraining acc: [0.25666667 0.65666667 0.66       0.66333333 0.66333333 0.66333333]\n",
      "step: 1900 \ttraining acc: [0.14       0.68       0.68       0.68       0.67666667 0.67666667]\n",
      "step: 2000 \ttraining acc: [0.22333333 0.55       0.54666667 0.54666667 0.54666667 0.54666667]\n",
      "Test acc: [0.1891 0.47   0.4702 0.4697 0.4697 0.47  ]\n",
      "step: 2100 \ttraining acc: [0.21666667 0.51666667 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 2200 \ttraining acc: [0.25       0.53333333 0.53       0.52666667 0.52666667 0.52666667]\n",
      "step: 2300 \ttraining acc: [0.08666667 0.56       0.56       0.56       0.56       0.56      ]\n",
      "step: 2400 \ttraining acc: [0.25666667 0.53333333 0.53333333 0.54       0.54333333 0.54333333]\n",
      "step: 0 \ttraining acc: [0.18333333 0.62       0.62       0.62       0.62       0.62      ]\n",
      "Test acc: [0.1975 0.4788 0.479  0.4785 0.478  0.4775]\n",
      "step: 100 \ttraining acc: [0.21333333 0.61       0.61       0.61       0.61       0.61      ]\n",
      "step: 200 \ttraining acc: [0.19333333 0.6        0.6        0.60666667 0.60666667 0.60666667]\n",
      "step: 300 \ttraining acc: [0.19666667 0.63333333 0.63666667 0.63666667 0.63666667 0.64333333]\n",
      "step: 400 \ttraining acc: [0.21333333 0.54333333 0.54       0.54       0.54       0.53666667]\n",
      "step: 500 \ttraining acc: [0.14666667 0.54333333 0.54333333 0.54333333 0.54666667 0.54666667]\n",
      "step: 600 \ttraining acc: [0.13 0.63 0.63 0.63 0.63 0.63]\n",
      "step: 700 \ttraining acc: [0.23       0.61666667 0.62333333 0.62333333 0.62       0.62333333]\n",
      "step: 800 \ttraining acc: [0.15333333 0.58333333 0.58666667 0.58666667 0.58666667 0.58666667]\n",
      "step: 900 \ttraining acc: [0.19       0.53666667 0.53666667 0.53666667 0.53333333 0.53333333]\n",
      "step: 1000 \ttraining acc: [0.25666667 0.56333333 0.57       0.56666667 0.56666667 0.56666667]\n",
      "Test acc: [0.1968 0.4731 0.473  0.4724 0.472  0.472 ]\n",
      "step: 1100 \ttraining acc: [0.14333333 0.57333333 0.57666667 0.58       0.58333333 0.58333333]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 1200 \ttraining acc: [0.20666667 0.50666667 0.50666667 0.50666667 0.50666667 0.50666667]\n",
      "step: 1300 \ttraining acc: [0.21       0.55       0.54666667 0.54333333 0.54333333 0.54666667]\n",
      "step: 1400 \ttraining acc: [0.32333333 0.59666667 0.59666667 0.6        0.60333333 0.60666667]\n",
      "step: 1500 \ttraining acc: [0.15333333 0.59333333 0.59       0.59333333 0.59333333 0.59333333]\n",
      "step: 1600 \ttraining acc: [0.27       0.57333333 0.57333333 0.57       0.57       0.57      ]\n",
      "step: 1700 \ttraining acc: [0.17       0.56333333 0.56333333 0.56       0.56333333 0.56333333]\n",
      "step: 1800 \ttraining acc: [0.18333333 0.48666667 0.48666667 0.48666667 0.49       0.49333333]\n",
      "step: 1900 \ttraining acc: [0.16666667 0.58666667 0.58666667 0.58666667 0.58666667 0.58333333]\n",
      "step: 2000 \ttraining acc: [0.25333333 0.57       0.56666667 0.56333333 0.56333333 0.56333333]\n",
      "Test acc: [0.2086 0.4834 0.4827 0.4832 0.4846 0.4846]\n",
      "step: 2100 \ttraining acc: [0.12       0.51333333 0.51       0.51       0.51       0.51      ]\n",
      "step: 2200 \ttraining acc: [0.23333333 0.56       0.56       0.55666667 0.55666667 0.55666667]\n",
      "step: 2300 \ttraining acc: [0.18       0.56       0.56       0.56       0.56       0.55666667]\n",
      "step: 2400 \ttraining acc: [0.18666667 0.49333333 0.49       0.48666667 0.47666667 0.47666667]\n",
      "step: 0 \ttraining acc: [0.20666667 0.62666667 0.63       0.62333333 0.62333333 0.62333333]\n",
      "Test acc: [0.1937 0.4724 0.4744 0.475  0.4753 0.4756]\n",
      "step: 100 \ttraining acc: [0.19333333 0.50666667 0.51       0.51       0.51333333 0.51333333]\n",
      "step: 200 \ttraining acc: [0.29666667 0.48333333 0.48333333 0.48333333 0.48       0.48      ]\n",
      "step: 300 \ttraining acc: [0.19       0.55333333 0.55       0.55333333 0.55333333 0.55333333]\n",
      "step: 400 \ttraining acc: [0.18666667 0.6        0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 500 \ttraining acc: [0.18333333 0.58333333 0.58333333 0.58666667 0.58666667 0.58666667]\n",
      "step: 600 \ttraining acc: [0.2        0.64666667 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 700 \ttraining acc: [0.28333333 0.53666667 0.53666667 0.54       0.54333333 0.54333333]\n",
      "step: 800 \ttraining acc: [0.18666667 0.61666667 0.62       0.62       0.62       0.62      ]\n",
      "step: 900 \ttraining acc: [0.22333333 0.56666667 0.56666667 0.56333333 0.56       0.56333333]\n",
      "step: 1000 \ttraining acc: [0.22333333 0.53333333 0.53       0.53       0.53333333 0.53333333]\n",
      "Test acc: [0.2087 0.476  0.4768 0.4766 0.477  0.477 ]\n",
      "step: 1100 \ttraining acc: [0.20333333 0.57666667 0.56       0.56333333 0.56       0.56      ]\n",
      "step: 1200 \ttraining acc: [0.21333333 0.67       0.67       0.67333333 0.67333333 0.67333333]\n",
      "step: 1300 \ttraining acc: [0.11       0.59666667 0.6        0.6        0.6        0.60333333]\n",
      "step: 1400 \ttraining acc: [0.2        0.47666667 0.47666667 0.48       0.48       0.48      ]\n",
      "step: 1500 \ttraining acc: [0.23666667 0.67       0.67333333 0.67333333 0.67333333 0.67333333]\n",
      "step: 1600 \ttraining acc: [0.15333333 0.61666667 0.61666667 0.61666667 0.61666667 0.61666667]\n",
      "step: 1700 \ttraining acc: [0.2        0.56333333 0.57333333 0.57333333 0.57666667 0.57666667]\n",
      "step: 1800 \ttraining acc: [0.18666667 0.59       0.59333333 0.59666667 0.59333333 0.59333333]\n",
      "step: 1900 \ttraining acc: [0.19666667 0.55       0.54666667 0.54666667 0.54666667 0.54666667]\n",
      "step: 2000 \ttraining acc: [0.16       0.53666667 0.54       0.54333333 0.54333333 0.54333333]\n",
      "Test acc: [0.2006 0.474  0.4739 0.4746 0.4749 0.4749]\n",
      "step: 2100 \ttraining acc: [0.11333333 0.65       0.65       0.65       0.65       0.65      ]\n",
      "step: 2200 \ttraining acc: [0.19333333 0.57       0.57       0.57       0.57       0.57333333]\n",
      "step: 2300 \ttraining acc: [0.17       0.59666667 0.59333333 0.59       0.58333333 0.58666667]\n",
      "step: 2400 \ttraining acc: [0.25       0.58333333 0.58333333 0.58333333 0.58333333 0.58333333]\n",
      "step: 0 \ttraining acc: [0.21333333 0.65       0.65       0.65       0.65       0.65      ]\n",
      "Test acc: [0.1882 0.471  0.4714 0.472  0.472  0.4722]\n",
      "step: 100 \ttraining acc: [0.17666667 0.62       0.62       0.62       0.62       0.62333333]\n",
      "step: 200 \ttraining acc: [0.16333333 0.59333333 0.59666667 0.59       0.59       0.59      ]\n",
      "step: 300 \ttraining acc: [0.17666667 0.67       0.67       0.67       0.67       0.67      ]\n",
      "step: 400 \ttraining acc: [0.19333333 0.55666667 0.55666667 0.55666667 0.55666667 0.55666667]\n",
      "step: 500 \ttraining acc: [0.16       0.59333333 0.59333333 0.59333333 0.59333333 0.6       ]\n",
      "step: 600 \ttraining acc: [0.23333333 0.58666667 0.58666667 0.58666667 0.58666667 0.58333333]\n",
      "step: 700 \ttraining acc: [0.17666667 0.60666667 0.60333333 0.60333333 0.60333333 0.60666667]\n",
      "step: 800 \ttraining acc: [0.19666667 0.56       0.55666667 0.55333333 0.55333333 0.55333333]\n",
      "step: 900 \ttraining acc: [0.14666667 0.60333333 0.6        0.59666667 0.59666667 0.59666667]\n",
      "step: 1000 \ttraining acc: [0.17333333 0.59666667 0.59666667 0.6        0.6        0.6       ]\n",
      "Test acc: [0.1957 0.4773 0.477  0.4775 0.478  0.4785]\n",
      "step: 1100 \ttraining acc: [0.15333333 0.65       0.65       0.64666667 0.64666667 0.64666667]\n",
      "step: 1200 \ttraining acc: [0.21666667 0.60333333 0.60333333 0.60333333 0.6        0.6       ]\n",
      "step: 1300 \ttraining acc: [0.21       0.55666667 0.56       0.56333333 0.56333333 0.57      ]\n",
      "step: 1400 \ttraining acc: [0.26666667 0.67       0.67       0.67       0.66666667 0.67      ]\n",
      "step: 1500 \ttraining acc: [0.19333333 0.56333333 0.56333333 0.56       0.56333333 0.56333333]\n",
      "step: 1600 \ttraining acc: [0.22       0.57       0.57333333 0.57       0.57       0.56666667]\n",
      "step: 1700 \ttraining acc: [0.24       0.55333333 0.55333333 0.55       0.55       0.54666667]\n",
      "step: 1800 \ttraining acc: [0.18666667 0.58666667 0.58666667 0.58666667 0.58333333 0.58333333]\n",
      "step: 1900 \ttraining acc: [0.20333333 0.67       0.67666667 0.68       0.68333333 0.68666667]\n",
      "step: 2000 \ttraining acc: [0.2        0.68666667 0.68666667 0.68666667 0.68666667 0.68666667]\n",
      "Test acc: [0.199  0.4832 0.483  0.482  0.4814 0.482 ]\n",
      "step: 2100 \ttraining acc: [0.07666667 0.57666667 0.58       0.58333333 0.58333333 0.58333333]\n",
      "step: 2200 \ttraining acc: [0.31666667 0.66       0.65666667 0.65666667 0.65666667 0.65666667]\n",
      "step: 2300 \ttraining acc: [0.21666667 0.58333333 0.58666667 0.59       0.59       0.59      ]\n",
      "step: 2400 \ttraining acc: [0.2        0.63       0.63       0.62333333 0.62333333 0.62      ]\n",
      "step: 0 \ttraining acc: [0.20333333 0.63       0.63       0.63       0.63333333 0.63333333]\n",
      "Test acc: [0.198  0.4644 0.464  0.4648 0.4653 0.4656]\n",
      "step: 100 \ttraining acc: [0.27666667 0.58       0.58       0.58       0.58       0.58333333]\n",
      "step: 200 \ttraining acc: [0.15666667 0.55666667 0.55666667 0.56       0.55666667 0.56      ]\n",
      "step: 300 \ttraining acc: [0.17666667 0.54666667 0.54666667 0.54666667 0.54666667 0.54      ]\n",
      "step: 400 \ttraining acc: [0.07       0.63333333 0.63       0.64       0.64       0.65      ]\n",
      "step: 500 \ttraining acc: [0.21666667 0.54666667 0.54333333 0.54333333 0.54333333 0.54333333]\n",
      "step: 600 \ttraining acc: [0.24333333 0.6        0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 700 \ttraining acc: [0.19333333 0.59333333 0.59333333 0.59333333 0.59333333 0.59333333]\n",
      "step: 800 \ttraining acc: [0.19333333 0.62666667 0.63       0.63       0.63       0.62666667]\n",
      "step: 900 \ttraining acc: [0.13333333 0.52666667 0.53       0.53       0.53       0.53333333]\n",
      "step: 1000 \ttraining acc: [0.16666667 0.50333333 0.50666667 0.50666667 0.50666667 0.50666667]\n",
      "Test acc: [0.205  0.4717 0.4712 0.472  0.4724 0.4722]\n",
      "step: 1100 \ttraining acc: [0.14       0.60666667 0.60666667 0.60666667 0.60666667 0.61333333]\n",
      "step: 1200 \ttraining acc: [0.21       0.67333333 0.68       0.68       0.67333333 0.66666667]\n",
      "step: 1300 \ttraining acc: [0.19666667 0.65333333 0.65333333 0.65666667 0.65666667 0.66      ]\n",
      "step: 1400 \ttraining acc: [0.20666667 0.59333333 0.6        0.60333333 0.60333333 0.61      ]\n",
      "step: 1500 \ttraining acc: [0.16666667 0.65333333 0.65333333 0.65333333 0.65333333 0.65333333]\n",
      "step: 1600 \ttraining acc: [0.10333333 0.64666667 0.64666667 0.65333333 0.65333333 0.65333333]\n",
      "step: 1700 \ttraining acc: [0.19333333 0.60666667 0.61       0.61333333 0.62333333 0.62333333]\n",
      "step: 1800 \ttraining acc: [0.19666667 0.48333333 0.49333333 0.49333333 0.49666667 0.49666667]\n",
      "step: 1900 \ttraining acc: [0.22333333 0.65333333 0.65666667 0.65666667 0.66       0.66      ]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 2000 \ttraining acc: [0.20666667 0.50333333 0.50333333 0.50333333 0.50333333 0.5       ]\n",
      "Test acc: [0.2086 0.4893 0.4888 0.4883 0.4883 0.4883]\n",
      "step: 2100 \ttraining acc: [0.25       0.61666667 0.62333333 0.63       0.62666667 0.62666667]\n",
      "step: 2200 \ttraining acc: [0.20333333 0.51333333 0.52       0.51666667 0.51666667 0.51666667]\n",
      "step: 2300 \ttraining acc: [0.23333333 0.53       0.53333333 0.53666667 0.54333333 0.54666667]\n",
      "step: 2400 \ttraining acc: [0.15       0.63333333 0.63333333 0.64       0.64       0.64      ]\n",
      "step: 0 \ttraining acc: [0.19333333 0.52333333 0.52       0.52666667 0.53       0.53      ]\n",
      "Test acc: [0.2025 0.4795 0.4807 0.481  0.4812 0.481 ]\n",
      "step: 100 \ttraining acc: [0.24       0.62333333 0.62333333 0.62333333 0.62       0.62      ]\n",
      "step: 200 \ttraining acc: [0.13333333 0.47666667 0.48333333 0.48333333 0.48       0.47666667]\n",
      "step: 300 \ttraining acc: [0.21666667 0.63       0.62666667 0.62666667 0.63       0.63      ]\n",
      "step: 400 \ttraining acc: [0.15       0.48       0.48       0.48       0.48       0.47666667]\n",
      "step: 500 \ttraining acc: [0.2        0.53666667 0.53333333 0.53666667 0.53666667 0.53333333]\n",
      "step: 600 \ttraining acc: [0.21333333 0.54       0.55       0.55333333 0.55333333 0.55      ]\n",
      "step: 700 \ttraining acc: [0.19333333 0.58666667 0.58333333 0.58666667 0.58666667 0.58666667]\n",
      "step: 800 \ttraining acc: [0.16666667 0.58       0.58333333 0.58       0.58       0.58      ]\n",
      "step: 900 \ttraining acc: [0.14       0.59333333 0.59666667 0.59666667 0.59666667 0.59666667]\n",
      "step: 1000 \ttraining acc: [0.15666667 0.54       0.54       0.54       0.54       0.54      ]\n",
      "Test acc: [0.2009 0.485  0.4854 0.4846 0.4844 0.4841]\n",
      "step: 1100 \ttraining acc: [0.23333333 0.65       0.65       0.65       0.64666667 0.64666667]\n",
      "step: 1200 \ttraining acc: [0.13       0.67333333 0.67333333 0.67333333 0.67       0.67      ]\n",
      "step: 1300 \ttraining acc: [0.11333333 0.57333333 0.57333333 0.57666667 0.58       0.58      ]\n",
      "step: 1400 \ttraining acc: [0.17666667 0.53       0.53333333 0.53333333 0.54333333 0.54666667]\n",
      "step: 1500 \ttraining acc: [0.17333333 0.63333333 0.63333333 0.63333333 0.63       0.63      ]\n",
      "step: 1600 \ttraining acc: [0.15333333 0.59       0.59       0.59333333 0.59666667 0.59666667]\n",
      "step: 1700 \ttraining acc: [0.19       0.62333333 0.62       0.62       0.62333333 0.62333333]\n",
      "step: 1800 \ttraining acc: [0.18666667 0.66333333 0.66666667 0.66666667 0.66       0.65666667]\n",
      "step: 1900 \ttraining acc: [0.19666667 0.62333333 0.61666667 0.61333333 0.61333333 0.61666667]\n",
      "step: 2000 \ttraining acc: [0.23       0.48666667 0.48666667 0.48666667 0.49       0.49      ]\n",
      "Test acc: [0.2003 0.4897 0.4905 0.4893 0.4893 0.4893]\n",
      "step: 2100 \ttraining acc: [0.31333333 0.59       0.58666667 0.58666667 0.59       0.59      ]\n",
      "step: 2200 \ttraining acc: [0.14333333 0.68333333 0.68333333 0.68333333 0.68333333 0.68333333]\n",
      "step: 2300 \ttraining acc: [0.29       0.51       0.51       0.51       0.51333333 0.51333333]\n",
      "step: 2400 \ttraining acc: [0.26333333 0.60333333 0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 0 \ttraining acc: [0.20333333 0.54333333 0.54666667 0.54333333 0.54       0.54333333]\n",
      "Test acc: [0.2125 0.4727 0.473  0.4724 0.4722 0.473 ]\n",
      "step: 100 \ttraining acc: [0.30666667 0.61       0.61333333 0.61333333 0.61666667 0.61666667]\n",
      "step: 200 \ttraining acc: [0.21       0.61       0.61       0.60666667 0.60666667 0.60666667]\n",
      "step: 300 \ttraining acc: [0.2        0.59       0.59       0.59       0.59       0.59333333]\n",
      "step: 400 \ttraining acc: [0.20666667 0.61333333 0.61333333 0.61666667 0.61666667 0.61666667]\n",
      "step: 500 \ttraining acc: [0.15666667 0.55666667 0.56       0.55666667 0.55666667 0.55666667]\n",
      "step: 600 \ttraining acc: [0.13       0.47666667 0.47666667 0.47666667 0.47666667 0.47666667]\n",
      "step: 700 \ttraining acc: [0.18666667 0.56       0.56       0.55666667 0.55666667 0.55666667]\n",
      "step: 800 \ttraining acc: [0.19 0.57 0.58 0.58 0.58 0.58]\n",
      "step: 900 \ttraining acc: [0.17       0.49333333 0.5        0.5        0.49666667 0.49666667]\n",
      "step: 1000 \ttraining acc: [0.19       0.54666667 0.54333333 0.54       0.53333333 0.53333333]\n",
      "Test acc: [0.1968 0.4746 0.4758 0.4758 0.476  0.4773]\n",
      "step: 1100 \ttraining acc: [0.18333333 0.62666667 0.62333333 0.62333333 0.62333333 0.62333333]\n",
      "step: 1200 \ttraining acc: [0.26333333 0.59       0.59666667 0.6        0.61       0.61333333]\n",
      "step: 1300 \ttraining acc: [0.20666667 0.62333333 0.62333333 0.62333333 0.62333333 0.62333333]\n",
      "step: 1400 \ttraining acc: [0.21333333 0.56666667 0.56666667 0.56333333 0.56333333 0.56333333]\n",
      "step: 1500 \ttraining acc: [0.22666667 0.58666667 0.58666667 0.58666667 0.58333333 0.58666667]\n",
      "step: 1600 \ttraining acc: [0.17       0.56666667 0.56666667 0.56666667 0.56666667 0.56333333]\n",
      "step: 1700 \ttraining acc: [0.2        0.63666667 0.63333333 0.63       0.63333333 0.63333333]\n",
      "step: 1800 \ttraining acc: [0.14666667 0.53       0.52666667 0.52666667 0.52       0.52      ]\n",
      "step: 1900 \ttraining acc: [0.08666667 0.52       0.52       0.52       0.52       0.52      ]\n",
      "step: 2000 \ttraining acc: [0.23666667 0.53       0.53       0.53666667 0.53666667 0.53666667]\n",
      "Test acc: [0.2023 0.4844 0.484  0.484  0.4844 0.4836]\n",
      "step: 2100 \ttraining acc: [0.13333333 0.55666667 0.55666667 0.55666667 0.55666667 0.55666667]\n",
      "step: 2200 \ttraining acc: [0.23333333 0.42333333 0.42333333 0.42       0.42       0.42      ]\n",
      "step: 2300 \ttraining acc: [0.27       0.53       0.53333333 0.53333333 0.53333333 0.53333333]\n",
      "step: 2400 \ttraining acc: [0.16666667 0.60333333 0.60333333 0.60333333 0.6        0.6       ]\n",
      "step: 0 \ttraining acc: [0.2        0.61666667 0.61333333 0.61333333 0.61666667 0.61666667]\n",
      "Test acc: [0.2012 0.476  0.4768 0.4773 0.477  0.477 ]\n",
      "step: 100 \ttraining acc: [0.20666667 0.58333333 0.58666667 0.58666667 0.59333333 0.59666667]\n",
      "step: 200 \ttraining acc: [0.17       0.45333333 0.45333333 0.45333333 0.45666667 0.45666667]\n",
      "step: 300 \ttraining acc: [0.13666667 0.70666667 0.70666667 0.71       0.71       0.71      ]\n",
      "step: 400 \ttraining acc: [0.24       0.60333333 0.60666667 0.60666667 0.60666667 0.60666667]\n",
      "step: 500 \ttraining acc: [0.19       0.64666667 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 600 \ttraining acc: [0.22333333 0.64666667 0.65       0.65       0.65       0.65      ]\n",
      "step: 700 \ttraining acc: [0.21       0.55333333 0.55333333 0.55333333 0.55333333 0.54333333]\n",
      "step: 800 \ttraining acc: [0.22       0.51333333 0.51333333 0.51333333 0.51333333 0.51333333]\n",
      "step: 900 \ttraining acc: [0.17333333 0.64666667 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 1000 \ttraining acc: [0.24333333 0.62       0.62       0.62333333 0.62       0.62666667]\n",
      "Test acc: [0.2063 0.4673 0.4692 0.4688 0.4683 0.4683]\n",
      "step: 1100 \ttraining acc: [0.19       0.58666667 0.58333333 0.58666667 0.59       0.59      ]\n",
      "step: 1200 \ttraining acc: [0.26666667 0.59333333 0.59333333 0.59333333 0.59333333 0.59333333]\n",
      "step: 1300 \ttraining acc: [0.20666667 0.58333333 0.58333333 0.58333333 0.58666667 0.58666667]\n",
      "step: 1400 \ttraining acc: [0.26666667 0.46       0.45       0.45333333 0.45333333 0.46      ]\n",
      "step: 1500 \ttraining acc: [0.12333333 0.55       0.55       0.55       0.55       0.55      ]\n",
      "step: 1600 \ttraining acc: [0.23333333 0.56       0.56       0.55666667 0.56       0.56333333]\n",
      "step: 1700 \ttraining acc: [0.18       0.65       0.65       0.65       0.64666667 0.64666667]\n",
      "step: 1800 \ttraining acc: [0.18333333 0.53666667 0.54       0.54       0.54       0.54      ]\n",
      "step: 1900 \ttraining acc: [0.20333333 0.71       0.71       0.71       0.71333333 0.71333333]\n",
      "step: 2000 \ttraining acc: [0.24       0.65333333 0.65333333 0.65333333 0.65333333 0.65333333]\n",
      "Test acc: [0.1837 0.4746 0.4739 0.4736 0.4736 0.474 ]\n",
      "step: 2100 \ttraining acc: [0.14333333 0.63333333 0.63333333 0.63333333 0.63333333 0.63333333]\n",
      "step: 2200 \ttraining acc: [0.17666667 0.64       0.64333333 0.64666667 0.64666667 0.64666667]\n",
      "step: 2300 \ttraining acc: [0.21333333 0.65333333 0.65333333 0.65333333 0.65       0.65      ]\n",
      "step: 2400 \ttraining acc: [0.11333333 0.67666667 0.68333333 0.68333333 0.68       0.68      ]\n",
      "step: 0 \ttraining acc: [0.2        0.6        0.59666667 0.59666667 0.59666667 0.59666667]\n",
      "Test acc: [0.2026 0.4739 0.474  0.474  0.4749 0.4753]\n",
      "step: 100 \ttraining acc: [0.22333333 0.56666667 0.56666667 0.56666667 0.56666667 0.56666667]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 200 \ttraining acc: [0.19333333 0.52666667 0.52666667 0.52666667 0.53       0.53      ]\n",
      "step: 300 \ttraining acc: [0.15       0.63333333 0.63333333 0.63333333 0.63333333 0.63333333]\n",
      "step: 400 \ttraining acc: [0.2        0.57       0.57       0.56666667 0.56       0.56      ]\n",
      "step: 500 \ttraining acc: [0.14333333 0.41       0.41       0.41333333 0.41333333 0.41333333]\n",
      "step: 600 \ttraining acc: [0.22333333 0.63       0.63       0.63       0.63       0.63      ]\n",
      "step: 700 \ttraining acc: [0.18333333 0.53666667 0.53333333 0.53333333 0.53666667 0.54333333]\n",
      "step: 800 \ttraining acc: [0.19333333 0.60333333 0.61333333 0.61       0.61       0.61      ]\n",
      "step: 900 \ttraining acc: [0.18666667 0.69666667 0.7        0.70333333 0.70333333 0.70333333]\n",
      "step: 1000 \ttraining acc: [0.2        0.56333333 0.58333333 0.58       0.58333333 0.58333333]\n",
      "Test acc: [0.2    0.4736 0.4717 0.4722 0.4739 0.4736]\n",
      "step: 1100 \ttraining acc: [0.22       0.6        0.59666667 0.59666667 0.59666667 0.59666667]\n",
      "step: 1200 \ttraining acc: [0.20666667 0.57333333 0.57333333 0.57666667 0.57666667 0.57666667]\n",
      "step: 1300 \ttraining acc: [0.18       0.66666667 0.67       0.67       0.66333333 0.66333333]\n",
      "step: 1400 \ttraining acc: [0.25       0.65666667 0.65666667 0.65666667 0.66       0.66      ]\n",
      "step: 1500 \ttraining acc: [0.23333333 0.61       0.61       0.61       0.61       0.61      ]\n",
      "step: 1600 \ttraining acc: [0.23666667 0.59       0.59333333 0.59333333 0.59333333 0.59      ]\n",
      "step: 1700 \ttraining acc: [0.18       0.63666667 0.63666667 0.63666667 0.63666667 0.63666667]\n",
      "step: 1800 \ttraining acc: [0.23       0.66       0.66333333 0.66333333 0.66333333 0.66333333]\n",
      "step: 1900 \ttraining acc: [0.26       0.58333333 0.58333333 0.58       0.58333333 0.57666667]\n",
      "step: 2000 \ttraining acc: [0.21666667 0.66333333 0.66333333 0.66666667 0.66666667 0.66666667]\n",
      "Test acc: [0.1974 0.465  0.4663 0.4663 0.4666 0.4666]\n",
      "step: 2100 \ttraining acc: [0.11       0.64333333 0.64333333 0.64333333 0.64333333 0.64333333]\n",
      "step: 2200 \ttraining acc: [0.22666667 0.57333333 0.57333333 0.57       0.57       0.57      ]\n",
      "step: 2300 \ttraining acc: [0.11333333 0.59666667 0.6        0.6        0.60333333 0.60666667]\n",
      "step: 2400 \ttraining acc: [0.24666667 0.59333333 0.59333333 0.59333333 0.59333333 0.59333333]\n",
      "step: 0 \ttraining acc: [0.16       0.51       0.51       0.51       0.51333333 0.51333333]\n",
      "Test acc: [0.19   0.4702 0.4702 0.4702 0.47   0.47  ]\n",
      "step: 100 \ttraining acc: [0.21666667 0.55666667 0.55666667 0.55666667 0.55666667 0.55666667]\n",
      "step: 200 \ttraining acc: [0.18666667 0.62       0.62       0.62333333 0.62333333 0.62333333]\n",
      "step: 300 \ttraining acc: [0.13666667 0.60333333 0.6        0.6        0.6        0.6       ]\n",
      "step: 400 \ttraining acc: [0.22       0.64       0.64       0.63666667 0.63666667 0.63333333]\n",
      "step: 500 \ttraining acc: [0.23666667 0.63333333 0.63666667 0.64       0.64       0.64      ]\n",
      "step: 600 \ttraining acc: [0.18666667 0.54666667 0.54666667 0.54666667 0.54666667 0.54666667]\n",
      "step: 700 \ttraining acc: [0.24       0.61666667 0.62       0.62333333 0.62333333 0.62333333]\n",
      "step: 800 \ttraining acc: [0.21333333 0.56666667 0.56666667 0.56666667 0.56666667 0.56666667]\n",
      "step: 900 \ttraining acc: [0.22333333 0.57       0.57       0.57       0.57       0.57      ]\n",
      "step: 1000 \ttraining acc: [0.22333333 0.63       0.62666667 0.63333333 0.63333333 0.63333333]\n",
      "Test acc: [0.2014 0.4775 0.4788 0.4785 0.479  0.4783]\n",
      "step: 1100 \ttraining acc: [0.15       0.56333333 0.56333333 0.56333333 0.56333333 0.56333333]\n",
      "step: 1200 \ttraining acc: [0.19 0.57 0.57 0.57 0.57 0.57]\n",
      "step: 1300 \ttraining acc: [0.26333333 0.64333333 0.64       0.63666667 0.63666667 0.63333333]\n",
      "step: 1400 \ttraining acc: [0.29       0.57666667 0.58333333 0.58333333 0.58666667 0.59      ]\n",
      "step: 1500 \ttraining acc: [0.17333333 0.61       0.61       0.61       0.61       0.61      ]\n",
      "step: 1600 \ttraining acc: [0.09333333 0.69333333 0.69333333 0.69333333 0.69333333 0.69333333]\n",
      "step: 1700 \ttraining acc: [0.19666667 0.72666667 0.72666667 0.72666667 0.72666667 0.72333333]\n",
      "step: 1800 \ttraining acc: [0.21666667 0.54666667 0.55333333 0.55333333 0.55       0.55333333]\n",
      "step: 1900 \ttraining acc: [0.23333333 0.62       0.62       0.62       0.62       0.61666667]\n",
      "step: 2000 \ttraining acc: [0.23333333 0.58333333 0.58666667 0.58333333 0.58       0.58333333]\n",
      "Test acc: [0.2094 0.4731 0.473  0.4727 0.4731 0.4736]\n",
      "step: 2100 \ttraining acc: [0.16333333 0.58333333 0.58333333 0.58666667 0.58666667 0.58666667]\n",
      "step: 2200 \ttraining acc: [0.17333333 0.64666667 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 2300 \ttraining acc: [0.14333333 0.56       0.56       0.56333333 0.56333333 0.56333333]\n",
      "step: 2400 \ttraining acc: [0.15333333 0.59333333 0.59333333 0.59333333 0.59666667 0.59666667]\n",
      "step: 0 \ttraining acc: [0.24       0.62666667 0.63       0.63333333 0.63333333 0.63666667]\n",
      "Test acc: [0.1995 0.4795 0.4805 0.4817 0.4817 0.4814]\n",
      "step: 100 \ttraining acc: [0.21333333 0.54333333 0.54333333 0.54333333 0.54333333 0.54333333]\n",
      "step: 200 \ttraining acc: [0.2        0.67333333 0.67666667 0.67666667 0.67666667 0.68      ]\n",
      "step: 300 \ttraining acc: [0.22333333 0.58       0.58666667 0.59       0.58666667 0.59      ]\n",
      "step: 400 \ttraining acc: [0.23666667 0.51333333 0.51333333 0.51333333 0.51333333 0.51333333]\n",
      "step: 500 \ttraining acc: [0.2        0.63333333 0.59333333 0.59333333 0.59333333 0.59333333]\n",
      "step: 600 \ttraining acc: [0.19666667 0.53666667 0.53666667 0.53666667 0.53666667 0.54      ]\n",
      "step: 700 \ttraining acc: [0.13333333 0.53       0.53       0.53       0.53       0.53      ]\n",
      "step: 800 \ttraining acc: [0.2        0.55333333 0.55333333 0.56       0.56       0.56666667]\n",
      "step: 900 \ttraining acc: [0.15666667 0.57666667 0.57666667 0.57666667 0.57666667 0.57333333]\n",
      "step: 1000 \ttraining acc: [0.2        0.56666667 0.57       0.57       0.57       0.57      ]\n",
      "Test acc: [0.1863 0.4688 0.4692 0.4692 0.469  0.469 ]\n",
      "step: 1100 \ttraining acc: [0.19666667 0.66       0.66       0.66       0.66       0.66      ]\n",
      "step: 1200 \ttraining acc: [0.19333333 0.70666667 0.70333333 0.70333333 0.7        0.7       ]\n",
      "step: 1300 \ttraining acc: [0.15333333 0.57       0.57333333 0.57333333 0.57333333 0.57333333]\n",
      "step: 1400 \ttraining acc: [0.22666667 0.54666667 0.54666667 0.54666667 0.54666667 0.54666667]\n",
      "step: 1500 \ttraining acc: [0.15333333 0.48666667 0.48333333 0.48333333 0.48333333 0.49      ]\n",
      "step: 1600 \ttraining acc: [0.17333333 0.68333333 0.68333333 0.68       0.67666667 0.67666667]\n",
      "step: 1700 \ttraining acc: [0.13666667 0.56666667 0.56666667 0.56       0.56       0.56333333]\n",
      "step: 1800 \ttraining acc: [0.15       0.53666667 0.53666667 0.53666667 0.53333333 0.53333333]\n",
      "step: 1900 \ttraining acc: [0.17       0.59666667 0.59666667 0.6        0.6        0.59666667]\n",
      "step: 2000 \ttraining acc: [0.25333333 0.57333333 0.57333333 0.57666667 0.57666667 0.57666667]\n",
      "Test acc: [0.1995 0.48   0.4807 0.481  0.4817 0.4817]\n",
      "step: 2100 \ttraining acc: [0.19       0.6        0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 2200 \ttraining acc: [0.20333333 0.53333333 0.53       0.52666667 0.52666667 0.52666667]\n",
      "step: 2300 \ttraining acc: [0.24333333 0.62       0.62       0.62       0.62       0.62      ]\n",
      "step: 2400 \ttraining acc: [0.19       0.63666667 0.63333333 0.63666667 0.63666667 0.63666667]\n",
      "step: 0 \ttraining acc: [0.09333333 0.70666667 0.70666667 0.70666667 0.70666667 0.70666667]\n",
      "Test acc: [0.193  0.472  0.473  0.4717 0.472  0.4722]\n",
      "step: 100 \ttraining acc: [0.24333333 0.62       0.62333333 0.62666667 0.63       0.63333333]\n",
      "step: 200 \ttraining acc: [0.2        0.51333333 0.51333333 0.51666667 0.51333333 0.51333333]\n",
      "step: 300 \ttraining acc: [0.14666667 0.60333333 0.60666667 0.60666667 0.60666667 0.60666667]\n",
      "step: 400 \ttraining acc: [0.22666667 0.65666667 0.65666667 0.65666667 0.66       0.66      ]\n",
      "step: 500 \ttraining acc: [0.20666667 0.53333333 0.53333333 0.53333333 0.53333333 0.53333333]\n",
      "step: 600 \ttraining acc: [0.17333333 0.53666667 0.53666667 0.54       0.54       0.54      ]\n",
      "step: 700 \ttraining acc: [0.19       0.64       0.64       0.63666667 0.63666667 0.63666667]\n",
      "step: 800 \ttraining acc: [0.28       0.47333333 0.46666667 0.46666667 0.46666667 0.46666667]\n",
      "step: 900 \ttraining acc: [0.21666667 0.45333333 0.45333333 0.45333333 0.45333333 0.45333333]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 1000 \ttraining acc: [0.22       0.65333333 0.65       0.64666667 0.64333333 0.64666667]\n",
      "Test acc: [0.2084 0.4753 0.4768 0.4775 0.4775 0.4775]\n",
      "step: 1100 \ttraining acc: [0.27       0.61666667 0.62       0.62333333 0.62333333 0.62333333]\n",
      "step: 1200 \ttraining acc: [0.19666667 0.53       0.52333333 0.52333333 0.52333333 0.52333333]\n",
      "step: 1300 \ttraining acc: [0.18666667 0.49       0.49333333 0.49333333 0.49333333 0.49333333]\n",
      "step: 1400 \ttraining acc: [0.19       0.53333333 0.53333333 0.53666667 0.53666667 0.53666667]\n",
      "step: 1500 \ttraining acc: [0.19666667 0.64       0.64       0.64       0.64333333 0.64333333]\n",
      "step: 1600 \ttraining acc: [0.16       0.52       0.52       0.52       0.51666667 0.51666667]\n",
      "step: 1700 \ttraining acc: [0.22       0.71333333 0.71333333 0.71333333 0.71333333 0.71333333]\n",
      "step: 1800 \ttraining acc: [0.16666667 0.61       0.61       0.61       0.61       0.61      ]\n",
      "step: 1900 \ttraining acc: [0.22333333 0.52333333 0.52333333 0.52333333 0.52333333 0.52333333]\n",
      "step: 2000 \ttraining acc: [0.21333333 0.57333333 0.57333333 0.58       0.58333333 0.58333333]\n",
      "Test acc: [0.2083 0.4653 0.465  0.465  0.4656 0.4663]\n",
      "step: 2100 \ttraining acc: [0.24333333 0.44       0.44       0.44       0.44       0.44      ]\n",
      "step: 2200 \ttraining acc: [0.14       0.58666667 0.58666667 0.59       0.59       0.58333333]\n",
      "step: 2300 \ttraining acc: [0.23333333 0.52666667 0.52666667 0.53       0.53333333 0.53      ]\n",
      "step: 2400 \ttraining acc: [0.23       0.56666667 0.57666667 0.57333333 0.57666667 0.57666667]\n",
      "step: 0 \ttraining acc: [0.18       0.55       0.54666667 0.54333333 0.54333333 0.54333333]\n",
      "Test acc: [0.2031 0.475  0.4746 0.4749 0.4756 0.4763]\n",
      "step: 100 \ttraining acc: [0.21 0.59 0.59 0.59 0.59 0.59]\n",
      "step: 200 \ttraining acc: [0.13666667 0.72       0.72       0.72       0.72333333 0.72333333]\n",
      "step: 300 \ttraining acc: [0.21666667 0.55333333 0.55666667 0.55333333 0.55333333 0.55333333]\n",
      "step: 400 \ttraining acc: [0.20333333 0.66       0.66       0.66       0.66       0.66      ]\n",
      "step: 500 \ttraining acc: [0.27666667 0.64666667 0.64666667 0.64666667 0.64666667 0.64666667]\n",
      "step: 600 \ttraining acc: [0.19666667 0.67       0.67       0.66666667 0.66666667 0.66666667]\n",
      "step: 700 \ttraining acc: [0.19666667 0.6        0.6        0.6        0.60333333 0.60333333]\n",
      "step: 800 \ttraining acc: [0.22 0.63 0.63 0.63 0.63 0.63]\n",
      "step: 900 \ttraining acc: [0.19333333 0.66666667 0.66666667 0.66666667 0.67       0.67      ]\n",
      "step: 1000 \ttraining acc: [0.17       0.58       0.58333333 0.58333333 0.58333333 0.59      ]\n",
      "Test acc: [0.199  0.473  0.4731 0.4736 0.4739 0.4744]\n",
      "step: 1100 \ttraining acc: [0.20333333 0.55333333 0.55333333 0.55       0.54666667 0.55      ]\n",
      "step: 1200 \ttraining acc: [0.23333333 0.60666667 0.60666667 0.60666667 0.60666667 0.61      ]\n",
      "step: 1300 \ttraining acc: [0.20333333 0.62       0.62       0.62       0.62333333 0.62333333]\n",
      "step: 1400 \ttraining acc: [0.17 0.67 0.67 0.67 0.67 0.67]\n",
      "step: 1500 \ttraining acc: [0.22       0.63333333 0.63       0.63       0.63       0.63      ]\n",
      "step: 1600 \ttraining acc: [0.24666667 0.63       0.63       0.62666667 0.62666667 0.62666667]\n",
      "step: 1700 \ttraining acc: [0.23       0.6        0.60333333 0.60333333 0.60333333 0.60333333]\n",
      "step: 1800 \ttraining acc: [0.19       0.59       0.59333333 0.59       0.59333333 0.59333333]\n",
      "step: 1900 \ttraining acc: [0.15666667 0.53       0.53       0.53       0.53       0.53333333]\n",
      "step: 2000 \ttraining acc: [0.27666667 0.65       0.65       0.65       0.64666667 0.64666667]\n",
      "Test acc: [0.2094 0.4717 0.4722 0.4727 0.473  0.4731]\n",
      "step: 2100 \ttraining acc: [0.19       0.60333333 0.60666667 0.60333333 0.60333333 0.6       ]\n",
      "step: 2200 \ttraining acc: [0.13666667 0.51666667 0.51666667 0.51666667 0.51666667 0.51666667]\n",
      "step: 2300 \ttraining acc: [0.2        0.70333333 0.73333333 0.73       0.73333333 0.73333333]\n",
      "step: 2400 \ttraining acc: [0.22       0.57666667 0.57666667 0.58       0.58       0.58333333]\n",
      "step: 0 \ttraining acc: [0.22666667 0.62333333 0.62333333 0.62333333 0.62333333 0.62333333]\n",
      "Test acc: [0.1974 0.4668 0.4675 0.4685 0.4688 0.4685]\n",
      "step: 100 \ttraining acc: [0.13       0.69333333 0.69666667 0.69666667 0.69666667 0.69666667]\n",
      "step: 200 \ttraining acc: [0.12666667 0.58666667 0.58666667 0.59       0.59333333 0.59333333]\n",
      "step: 300 \ttraining acc: [0.23666667 0.52333333 0.52666667 0.53       0.53       0.53      ]\n",
      "step: 400 \ttraining acc: [0.21666667 0.58333333 0.57666667 0.57333333 0.58       0.58      ]\n",
      "step: 500 \ttraining acc: [0.14333333 0.56       0.55666667 0.55666667 0.55333333 0.56      ]\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-18-e4d6c40184b7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     95\u001b[0m                 \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Test acc:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     96\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 97\u001b[0;31m \u001b[0mmain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-18-e4d6c40184b7>\u001b[0m in \u001b[0;36mmain\u001b[0;34m()\u001b[0m\n\u001b[1;32m     71\u001b[0m         \u001b[0mdb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDataLoader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmini_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshuffle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_workers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpin_memory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     72\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 73\u001b[0;31m         \u001b[0;32mfor\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx_spt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_spt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_qry\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_qry\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     75\u001b[0m             \u001b[0mx_spt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_spt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_qry\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_qry\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx_spt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_spt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_qry\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_qry\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/ML3.6/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    802\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    803\u001b[0m             \u001b[0;32massert\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_shutdown\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tasks_outstanding\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 804\u001b[0;31m             \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    805\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tasks_outstanding\u001b[0m \u001b[0;34m-=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    806\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/ML3.6/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_get_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    759\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    760\u001b[0m             \u001b[0;32mwhile\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory_thread\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_alive\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 761\u001b[0;31m                 \u001b[0msuccess\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_try_get_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    762\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0msuccess\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    763\u001b[0m                     \u001b[0;32mreturn\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/ML3.6/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_try_get_data\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m    722\u001b[0m         \u001b[0;31m#   (bool: whether successfully get data, any: data if successful else None)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    723\u001b[0m         \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 724\u001b[0;31m             \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data_queue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    725\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    726\u001b[0m         \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/ML3.6/lib/python3.6/queue.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m    171\u001b[0m                     \u001b[0;32mif\u001b[0m \u001b[0mremaining\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    172\u001b[0m                         \u001b[0;32mraise\u001b[0m \u001b[0mEmpty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m                     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnot_empty\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mremaining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    174\u001b[0m             \u001b[0mitem\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    175\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnot_full\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/ML3.6/lib/python3.6/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m    297\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    298\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 299\u001b[0;31m                     \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    300\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    301\u001b[0m                     \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "import  torch, os\n",
    "import  numpy as np\n",
    "import  scipy.stats\n",
    "from    torch.utils.data import DataLoader\n",
    "from    torch.optim import lr_scheduler\n",
    "import  random, sys, pickle\n",
    "import  argparse\n",
    "import torch.nn.functional as F\n",
    "\n",
    "\n",
    "\n",
    "def mean_confidence_interval(accs, confidence=0.95):\n",
    "    n = accs.shape[0]\n",
    "    m, se = np.mean(accs), scipy.stats.sem(accs)\n",
    "    h = se * scipy.stats.t._ppf((1 + confidence) / 2, n - 1)\n",
    "    return m, h\n",
    "\n",
    "\n",
    "n_way = 5\n",
    "k_spt = 1\n",
    "epochs = 1000001\n",
    "\n",
    "\n",
    "\n",
    "def main():\n",
    "\n",
    "    torch.manual_seed(222)\n",
    "    torch.cuda.manual_seed_all(222)\n",
    "    np.random.seed(222)\n",
    "\n",
    "\n",
    "    config = [\n",
    "        ('conv2d', [32, 3, 3, 3, 1, 1]),\n",
    "        ('relu', [True]),\n",
    "        ('bn', [32]),\n",
    "        ('max_pool2d', [2, 2, 0]),\n",
    "        ('conv2d', [32, 32, 3, 3, 1, 1]),\n",
    "        ('relu', [True]),\n",
    "        ('bn', [32]),\n",
    "        ('max_pool2d', [2, 2, 0]),\n",
    "        ('conv2d', [32, 32, 3, 3, 1, 1]),\n",
    "        ('relu', [True]),\n",
    "        ('bn', [32]),\n",
    "        ('max_pool2d', [2, 2, 0]),\n",
    "        ('conv2d', [32, 32, 3, 3, 1, 1]),\n",
    "        ('relu', [True]),\n",
    "        ('bn', [32]),\n",
    "        ('max_pool2d', [2, 2, 0]),\n",
    "        ('flatten', []),\n",
    "        ('linear', [n_way, 32 * 5 * 5])\n",
    "    ]\n",
    "\n",
    "    device = torch.device('cuda:2')\n",
    "    maml = Meta(config).to(device)\n",
    "\n",
    "    tmp = filter(lambda x: x.requires_grad, maml.parameters())\n",
    "    num = sum(map(lambda x: np.prod(x.shape), tmp))\n",
    "#     print(maml)\n",
    "#     print('Total trainable tensors:', num)\n",
    "\n",
    "    # batchsz here means total episode number\n",
    "    mini_train = MiniImagenet('./../datasets/mini-imagenet/', mode='train', n_way=5, k_shot=1,\n",
    "                        k_query=15,\n",
    "                        batchsz=10000, resize=84)\n",
    "    mini_test = MiniImagenet('./../datasets/mini-imagenet/', mode='test', n_way=5, k_shot=1,\n",
    "                             k_query=15,\n",
    "                             batchsz=100, resize=84)\n",
    "\n",
    "    for epoch in range(epochs//10000):\n",
    "        # fetch meta_batchsz num of episode each time\n",
    "        db = DataLoader(mini_train, 4, shuffle=True, num_workers=4, pin_memory=True)\n",
    "\n",
    "        for step, (x_spt, y_spt, x_qry, y_qry) in enumerate(db):\n",
    "\n",
    "            x_spt, y_spt, x_qry, y_qry = x_spt.to(device), y_spt.to(device), x_qry.to(device), y_qry.to(device)\n",
    "            accs = maml(x_spt, y_spt, x_qry, y_qry)\n",
    "            \n",
    "            \n",
    "            if step % 100 == 0:\n",
    "                print('step:', step, '\\ttraining acc:', accs)\n",
    "\n",
    "            if step % 1000 == 0:  # evaluation\n",
    "                db_test = DataLoader(mini_test, 1, shuffle=True, num_workers=4, pin_memory=True)\n",
    "                accs_all_test = []\n",
    "\n",
    "                for x_spt, y_spt, x_qry, y_qry in db_test:\n",
    "                    x_spt, y_spt, x_qry, y_qry = x_spt.squeeze(0).to(device), y_spt.squeeze(0).to(device), \\\n",
    "                                                 x_qry.squeeze(0).to(device), y_qry.squeeze(0).to(device)\n",
    "\n",
    "                    accs = maml.finetunning(x_spt, y_spt, x_qry, y_qry)\n",
    "                    accs_all_test.append(accs)\n",
    "\n",
    "                # [b, update_step+1]\n",
    "                accs = np.array(accs_all_test).mean(axis=0).astype(np.float16)\n",
    "                print('Test acc:', accs)\n",
    "\n",
    "main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2020-04-14T07:49:14.040Z"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ML3.6",
   "language": "python",
   "name": "ml3.6"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
